Poco :: Thread挂机多次启动并快速连续加入

时间:2016-09-16 11:38:47

标签: c++ multithreading poco-libraries

我使用Poco :: Thread遇到了问题。此代码在4K迭代时挂起。使用GCC 4.6.1为QNX5构建,POCO_VERSION 0x01040602。

ggplot(...) + geom_point() + scale_colour_manual(values = c("red","red"))

然而,它直接使用PThread工作正常,它也适用于Windows。我会很高兴得到一些帮助。

1 个答案:

答案 0 :(得分:1)

Poco :: Thread的内部状态不是线程安全的(原子)。您将在start()join()isRunning()中遇到竞争条件导致线程泄漏(未加入当前Runnable)。

使用g ++和-fsanitize = thread -static-libtsan:

WARNING: ThreadSanitizer: thread leak (pid=24366)
  Thread T1 (tid=32349, finished) created by main thread at:
    #0 pthread_create <null> (Test+0x0000004945e7)
    #1 Poco::ThreadImpl::startImpl(Poco::Runnable&) <null> (libPocoFoundation.so.20+0x0000000f8d67)
    #2 __libc_start_main <null> (libc.so.6+0x00000002082f)

  And 11 more similar thread leaks.

查看POCO的来源,Poco :: Event(由Poco :: Thread`内部使用)似乎是实现中存在问题的部分。

我建议不要使用Poco::Thread并使用std::thread(C ++ 11)。