【发布时间】:2012-02-19 15:08:07
【问题描述】:
我发现 pthread_barrier_wait 非常慢,所以在我的代码中的一个地方,我将 pthread_barrier_wait 替换为我的屏障版本(my_barrier ),它使用原子变量。我发现它比 pthread_barrier_wait 快得多。使用这种方法有什么缺陷吗?这是正确的吗?另外,我不知道为什么它比 pthread_barrier_wait 快?有什么线索吗?
编辑
-
我主要对线程数与内核数相等的情况感兴趣。
atomic<int> thread_count = 0; void my_barrier() { thread_count++; while( thread_count % NUM_OF_THREADS ) sched_yield(); }
【问题讨论】:
-
我能看到的唯一区别是 pthread_barrier_wait() 将选择一个线程通过 PTHREAD_BARRIER_SERIAL_THREAD 而所有其他线程将获得 0。如果您不需要此功能,您的实现看起来和我一样。
-
@kfmfe04:远非如此。看我的回答。实现具有 POSIX 标准所需的所有属性的屏障(其中许多属性比您想象的更有用)绝非易事。
标签: c++ c multithreading c++11