Я использую G CC 9.2 TSan для анализа поведения многопоточности в моей кодовой базе (явно используя pthreads - мы начали до C ++ 11). У меня есть гонка данных, пока уничтоженный мьютекс удерживается, со следующим (относительно бесполезным):
Mutex M974039071667323520 is already destroyed.
И никакой дополнительной информации о том, где был создан этот мьютекс или где он был уничтожен. TSan сообщает о трассировке стека доступного местоположения кучи, где была выделена эта куча памяти, и о создании потоков, но нет трассировки стека о том, где были уничтожены мьютексы.
Я хотел бы добавить отладочный вывод в места, где у меня есть возможные кандидаты для этих мьютексов, но мне не помогло бы, если бы я никак не мог соотнести мьютекс оператора отладки с сообщаемым мьютексом - таким образом, вопрос:
Есть ли способ использовать Имя мьютекса, сообщаемое ThreadSanitizer M974039071667323520
в моем собственном коде?
Из того, что я собрал примерно за 10 минут, просматривая кодовую базу g cc * libsanitizers/tsan/
, он выглядит как внутренний счетчик uid_gen_
атомарно увеличивается для каждого SyncVar
, что подразумевает, что это личное значение цана и нет способа получить это значение в моем коде, верно?