C ++でopenMPを使って強制的にスレッドを閉じる?

私は一定の時間を実行した後にopenMPのスレッドを閉じたいと思う。これどうやってするの?

3
@ JoachimPileborgそれはそれの複製ではありません。彼は明示的なスレッドではなく、openmpについて尋ねています。
追加された 著者 Tudor,
@ JoachimPileborg:rushafiの質問に関しては大きな違いがあります.OpenMPスレッドは管理されており、外部からは処理できません。あなたはjoin/suspend/abortを実行することはできませんし、明示的に開始することもできません。したがって、質問が「どうすれば明白なスレッドを停止できますか?」可能な答えは「コールアボート」でした。しかしこれはopenmpに関するものなので、同じ規則は適用されません。
追加された 著者 Tudor,
追加された 著者 Some programmer dude,
@ Tudorそして、OpenMPスレッドと通常スレッドの違いは何ですか?スレッドはスレッドであり、どのように起動したかは問題ではありません。
追加された 著者 Some programmer dude,

3 答え

OpenMPスレッドを外部から強制的に強制終了することはできません。それらには、結合、割り込み、中止などの操作を実行するために使用できるハンドルはありません。

実際、OpenMPはこのために設計されていません。特別なことをする必要がある場合は、ランタイムにスレッドを処理させ、明示的なスレッドを使用させる方がよいでしょう。

5
追加された
おそらく、あなたはpthreadsを使うことができます。 Windowsはそれらをネイティブにサポートしていませんが、次のような実装があります: sourceware.org/pthreads-win32
追加された 著者 Tudor,
ある時間が経過してスレッドを閉じることができるC ++用のクロスプラットフォームスレッドライブラリを提案できますか?
追加された 著者 rushafi,

スレッドの強制終了は、openmp APIを使用せず、 pthread_cancel()を使用して[並行]可能です。

NOTE : Killing openmp thread within parallel section is not recommended as Openmp barrier at the end of for loop will be expecting all threads to hit barrier. If one thread doesn't report/hit, then it will be infinite hang. Also, user may have to take care of thread/memory cleanup upon explicit killing.

 pthread_t pt;
 #pragma omp parallel for num_threads(3) firstprivate(i)
 for(n=0; n<10; ++n)
 {
        tid = gettid();
        pt = pthread_self();
        printf("i=%d -  %d - thread : %d :: TID=%d\n",i++, n, omp_get_thread_num(), gettid());
 }
printf("TID : %d - PT=%d\n", tid, pt);
pthread_cancel(pt);
0
追加された

特定のスレッドでこれを行うことができるかどうかはわかりませんが、トリック。あなたは基本的に何をしているのですか?フラグがセットされ、実行中のスレッドにそのフラグがセットされます。それについての詳細はリンクを確認してください。

0
追加された