Принудительно закрывать поток с помощью openMP в C ++? - PullRequest
3 голосов
/ 25 ноября 2011

Я хочу закрыть поток в openMP после выполнения определенного количества времени. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 25 ноября 2011

Потоки OpenMP не могут быть принудительно уничтожены извне.У них нет дескриптора, который вы можете использовать для выполнения таких операций, как объединение, прерывание, прерывание и т. Д.

На самом деле OpenMP даже не предназначен для этого.Лучше просто позволить среде выполнения обрабатывать потоки и использовать явные потоки, если вам нужно сделать что-то особенное.

0 голосов
/ 06 июня 2016

Возможно уничтожение потоков [ вне параллели ], не используя 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);
0 голосов
/ 25 ноября 2011

Я не знаю, можно ли сделать это для определенного потока, но вы можете добиться чего-то подобного с помощью трюка . Что вы в основном делаете, вы устанавливаете флаг и сбрасываете его в запущенные потоки, когда время истекло. Проверьте ссылку для более подробной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...