Je suis confronté à une impasse dans l'une de mes applications c (c'est un gros code) et j'ai été capable de déboguer la scène où j'ai imprimé un mutex. Il ressemble à ci-dessous -Déboguer un interblocage avec pthread mutex (linux)
{__data =
{__lock = 2,
__count = 0,
__owner = 15805,
__nusers = 1,
__kind = 0,
__spins = 0,
__list = {__prev = 0x0, __next = 0x0}
},
__size = "\002\000\000\000\000\000\000\000½=\000\000\001", '\0' <repeats 26 times>,
__align = 2
}
Maintenant, je peux comprendre que __owner est id fil de fil tenant ce mutex, même thread se termine dans une impasse pour ce mutex. Est-ce que quelqu'un sait le sens du reste des champs tels que _ lock, _count, __ spins etc qui pourrait être utile dans le débogage deadlocks? Des conseils/astuces seraient également les bienvenus? (Basé sur le débogage, j'ai compris le thread essaye de verrouiller le mutex qu'il détient déjà, se retrouvant dans l'impasse et d'autres threads sont en attente pour ce mutex)
Est-ce aussi possible de savoir à quelle ligne de code cela a été verrouillé en observant le processus/threads à travers le débogueur (gdb) (bien sûr, les informations de débogage et le code sont à portée de main) sans nécessiter de code-walkthrough prudent de code? J'ai parcouru mon code plusieurs fois mais je n'ai pas pu trouver où ce verrou a été laissé inédit avant de revenir de la fonction.
Merci Nerdy