Возможно уничтожение потоков [ вне параллели ], не используя openmp API, а через pthread_cancel()
.
ПРИМЕЧАНИЕ : уничтожение нити openmp в секции parallel
не рекомендуется, поскольку барьер Openmp в конце цикла for
будет ожидать, что все нити попадут в барьер. Если один поток не сообщает / не попадает, то это будет бесконечное зависание. Кроме того, пользователю может потребоваться очистить поток / память при явном уничтожении.
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);