我正在开发一个在多个主机应用程序中运行的插件,它使用boost :: thread库1.53.0维护自己的线程。
在Mac上的特定应用程序中运行插件时,调用boost::condition_variable::timed_wait()
时出现空访问错误。在调用堆栈的顶部是对pthread_getspecific()
的调用,该调用是从boost线程库中调用的。
如果我通过调用timed_wait()
替换boost::this_thread_sleep()
,则行为相同:在内部调用pthread_getspecific()
时抛出异常。
这个应用程序是唯一表现出这种行为的应用程序;如果我在其他主机中运行我的插件,它会按预期工作。
我对pthreads没有多少经验,但我认为异常必须是由主机应用程序设置的某些属性引起的。有没有人更好地了解这里会发生什么?
谢谢!
答案 0 :(得分:0)
事实证明,pthread API在我的应用程序中调用不是线程安全的地方,每当我在一个单独的线程中调用它时,就会导致空指针崩溃。