Поскольку 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();
}