Правильный ли такой подход с барьерами?

Я обнаружил, что 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 ();
    }
    
9
задан MetallicPriest 26 January 2012 в 14:32
поделиться