Я обнаружил, что pthread_barrier_wait работает довольно медленно, поэтому в одном месте моего кода я заменил pthread_barrier_wait моей версией барьера ( my_barrier ), который использует атомарную переменную. Я обнаружил, что это намного быстрее, чем pthread_barrier_wait . Есть ли недостаток в использовании этого подхода? Это правильно? Кроме того, я не знаю, почему он быстрее, чем pthread_barrier_wait ? Есть подсказка?
Меня в первую очередь интересуют случаи, когда количество потоков равно числу ядер.
атомарный thread_count = 0;
недействительным my_barrier ()
{
thread_count ++;
в то время как (количество потоков% NUM_OF_THREADS)
sched_yield ();
}