проблема гонки данных из низкоуровневой библиотечной функции tcl Tcl_NewStringObj - PullRequest
0 голосов
/ 14 января 2020

Поскольку Tcl использует Apartment Threading Model в качестве своего базового фрейма многопоточности, каждый интерпретатор tcl obj привязан к потоку, который его создает. В моей программе каждый поток вызывает Tcl_CreateInterp для создания своего собственного интерпретатора при первом запуске любых команд tcl. Но тест Q & A показал, что valgrind (v3.13.0) жалуется на возможную проблему гонки данных, когда потоки намереваются создать свой собственный интерпретатор. Гонка данных происходит в apis Tcl_NewStringObj / TEBCresume / TclNREvalObjv, et c. Что-нибудь, чтобы исправить для моей модели использования? Или это ложное срабатывание valgrind?

Я использую boost :: thread_specific_ptr для управления локальным интерпретатором потока.

Tcl_Interp* GetThreadInterp()
{
   static boost::thread_specific_ptr < Tcl_Interp >  tcl_interp;
   if (!tcl_interp.get())
       tcl_interp.reset(Tcl_CreateInterp());
   return tcl_interp.get();
}
...