次の (疑似) コードは、私が理解できない動作を引き起こします。2 つのスレッドが並行して実行されています。どちらも同じ (複雑な) 計算を行いますが、どちらが先に終了するかはわかりません。繰り返し実行すると、前者の方が早い場合と後者の方が早い場合があります。これは問題なく、意図したとおりに機能します。次に、最初に成功したスレッドが他のスレッドを終了し、両方が一緒に分岐する必要があります。ただし、最初のソルバーが終了するとすべてがうまくいきますが、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。疑似コードの詳細が不十分な場合はお知らせください。