Используйте имена Mutex ThreadSanitizer в коде - PullRequest
0 голосов
/ 18 марта 2020

Я использую G CC 9.2 TSan для анализа поведения многопоточности в моей кодовой базе (явно используя pthreads - мы начали до C ++ 11). У меня есть гонка данных, пока уничтоженный мьютекс удерживается, со следующим (относительно бесполезным):

Mutex M974039071667323520 is already destroyed.

И никакой дополнительной информации о том, где был создан этот мьютекс или где он был уничтожен. TSan сообщает о трассировке стека доступного местоположения кучи, где была выделена эта куча памяти, и о создании потоков, но нет трассировки стека о том, где были уничтожены мьютексы.

Я хотел бы добавить отладочный вывод в места, где у меня есть возможные кандидаты для этих мьютексов, но мне не помогло бы, если бы я никак не мог соотнести мьютекс оператора отладки с сообщаемым мьютексом - таким образом, вопрос:

Есть ли способ использовать Имя мьютекса, сообщаемое ThreadSanitizer M974039071667323520 в моем собственном коде?


Из того, что я собрал примерно за 10 минут, просматривая кодовую базу g cc * libsanitizers/tsan/, он выглядит как внутренний счетчик uid_gen_ атомарно увеличивается для каждого SyncVar, что подразумевает, что это личное значение цана и нет способа получить это значение в моем коде, верно?

...