我使用Poco :: Thread遇到了问题。此代码在4K迭代时挂起。使用GCC 4.6.1为QNX5构建,POCO_VERSION 0x01040602。
ggplot(...) + geom_point() + scale_colour_manual(values = c("red","red"))
然而,它直接使用PThread工作正常,它也适用于Windows。我会很高兴得到一些帮助。
答案 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)。