Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: __Heaven__ от Февраль 03, 2021, 23:39



Название: thread sanitizer
Отправлено: __Heaven__ от Февраль 03, 2021, 23:39
Всем привет!
Крайне мало работал с многопоточностью и детектом ошибок
В моём qt приожении преимущественно используется omp на циклах for. Имеется 1 std::async, который работает пока парсится файл при открытии, а основной поток прогресс отображает
Скомпилил с thread sanitizer и получил неясный результат (аттач)
Не понимаю, в чём проблема, halp!
Место создания Т9: AboutDlg создаётся на стэке в MainWindow, который как родитель передаётся в списке инициализации конструктора.
Место создания Т19: функция, которая вызывается конструктором MainWindow, конкретная строчка:
Код:
connect(ui->openGeometryAct, &QAction::triggered, [this]{openGeometryFile();});
В openGeometryFile() вызывается std::async, но предупреждение возникает и тогда, когда программа ниразу эту функцию не дёргает

Как интерпретировать диагностику?
archlinux
clang version 11.0.1
extra/qt5-base 5.15.2-3
Код:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=thread -O0")


Название: Re: thread sanitizer
Отправлено: Igors от Февраль 04, 2021, 09:30
Думается "когда нитка была создана" ничего не дает. Я задавал останов и смотрел где/как происходит race. Напр QListData - что делает нитка T7 ? При останове весь ее стек виден. А что в это же время делает T9 ?  Не пишут ли они в один QList ?

Кстати: на своей платформе мне так и не удалось подружить sanitizer с omp, хотя эта проблема известна и вроде бы решаема.