以下(伪)代码会引发一些我不理解的行为。我有 2 个线程并行运行。两者都进行相同(复杂)的计算,但我不知道哪个会先完成。反复运行,有第一个更快的情况,也有第二个更快的情况。这没关系,可以按预期工作。然后,第一个成功的线程应该终止另一个线程,并且两个线程应该一起分叉。但是,如果第一个求解器完成,则一切正常,但如果第二个求解器先完成,则“连接命令”不会识别出第一个求解器已终止(因此连接将永远等待,程序不会继续)。任何想法我做错了什么或我可以做些什么不同?
void* thread_function(...)
{
do_some_complex_task();
if (successfull && first_finsihed)
{
pthread_chancel(other_thread);
}
}
int main()
{
std::vector<pthread_t*> store;
store.resize(2);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
pthread_create(store[0], NULL, thread_function, ...);
pthread_create(store[1], NULL, thread_function, ...);
pthread_join(*store[0], NULL);
pthread_join(*store[1], NULL);
}
PS。如果伪代码不够详细,请告诉我。