在boost线程中调用pthread_getspecific时访问错误

时间:2013-08-19 11:13:37

标签: c++ macos pthreads boost-thread thread-local-storage

我正在开发一个在多个主机应用程序中运行的插件,它使用boost :: thread库1.53.0维护自己的线程。

在Mac上的特定应用程序中运行插件时,调用boost::condition_variable::timed_wait()时出现空访问错误。在调用堆栈的顶部是对pthread_getspecific()的调用,该调用是从boost线程库中调用的。

如果我通过调用timed_wait()替换boost::this_thread_sleep(),则行为相同:在内部调用pthread_getspecific()时抛出异常。

这个应用程序是唯一表现出这种行为的应用程序;如果我在其他主机中运行我的插件,它会按预期工作。

我对pthreads没有多少经验,但我认为异常必须是由主机应用程序设置的某些属性引起的。有没有人更好地了解这里会发生什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,pthread API在我的应用程序中调用不是线程安全的地方,每当我在一个单独的线程中调用它时,就会导致空指针崩溃。