Wie kann ein seltener Deadlock behoben werden?

Ich versuche, eine benutzerdefinierte Thread-Pool-Implementierung zu debuggen, die @ hselte Deadlocks. Daher kann ich einen Debugger wie gdb nicht verwenden, da ich den Debugger 100-mal "gestartet" habe, bevor ein Deadlock aufgetreten ist.

Zurzeit führe ich den Threadpool-Test in einer Endlosschleife in einem Shell-Skript aus, das heißt, ich kann keine Variablen usw. sehen. Ich versuche zustd::cout data, aber das verlangsamt den Thread und verringert das Risiko von Deadlocks, was bedeutet, dass ich eine Stunde mit meinem Infinite warten kann, bevor ich Nachrichten erhalte. Dann bekomme ich den Fehler nicht und brauche mehr Nachrichten, was bedeutet, dass ich noch eine Stunde warte ...

Wie kann man das Programm effizient debuggen, sodass es immer wieder neu gestartet wird, bis es blockiert? (Oder sollte ich vielleicht eine andere Frage mit dem gesamten Code öffnen, um Hilfe zu erhalten?)

Danke im Voraus

Bonus-Frage: Wie überprüfe ich, ob alles mit einem @ gut läufstd::condition_variable? Sie können nicht wirklich sagen, welcher Thread schläft oder ob eine Racebedingung auf dem @ auftritwait Bedingung

Antworten auf die Frage(10)

Ihre Antwort auf die Frage