Poco :: Thread를 사용하여 문제가 있습니다. 이 코드는 약 4K 회 반복합니다. QNX5 용 GCC 4.6.1, POCO_VERSION 0x01040602로 구축되었습니다.Poco :: 여러 번 시작하여 끊어지면서 빠르게 연속으로 연결
#include "Poco/Thread.h"
using namespace Poco;
class SignalAdapter: public Runnable
{
public:
SignalAdapter()
{}
virtual void run()
{
//printf("This is thread %d\n", Thread::currentTid());
}
};
int main() {
Thread oThread;
SignalAdapter oSignalAdapter{};
for (auto i = 0; i < 1e5; ++i)
{
oThread.start(oSignalAdapter);
if (oThread.isRunning())
oThread.join();
}
}
그러나 PThread를 직접 사용하면 문제가 없으며 Windows에서도 정상적으로 작동합니다. 도움이 되었으면 좋겠다.
if (oThread.isRunning()) 부분을 제거해보십시오. 다음 두 가지 이유 때문에 필요하지 않습니다. 이미 완료된 스레드에 참여할 수 있으며 동시성으로 인해 if 블록의 본문이 실행되기 전에 술어가 잘못 될 수 있습니다. –
@AlexeyGuseynov 사실 그것은 최소한의 예제를위한 해결책이며 술어에 대한 좋은 힌트입니다. 그러나, 전체 프로그램에서 isRunning() 스위치없이 충돌합니다. 나는 그것에 대해 재고 할 필요가있다. – Simon1X
이제 전체 프로그램에서 실제 문제를 발견했습니다. 시작하기 전에 조인을합니다. 그것은 즉시 충돌로 이어집니다. 분명히, Poco는 처음 시작된 적이없는 스레드 (pthread와는 다른 동작)와의 결합을 허용하지 않습니다. – Simon1X