现在我实现了我的障碍。
但效果不太好。
当我运行屏障时间计算代码
pthread_barrier_wait消耗180000美元
我的屏障消耗了39万美元
我不知道为什么我想制造更快速的障碍
这是我的密码

 82 pthread_mutex_t     mutexwait1;
 83 int wait_count = NUM_THREADS;
 84 int barrier1234(void) {
 85
 86     int status, cancel, tmp;
 87     status = pthread_mutex_lock(&mutexwait1);
 88     wait_count = wait_count - 1;
 89     if(wait_count == 0){
 90         pthread_cond_broadcast(&cond1);
 91         wait_count = NUM_THREADS ;
 92     }
 93     else
 94         status = pthread_cond_wait(&cond1, &mutexwait1);
 95
 96     pthread_mutex_unlock(&mutexwait1);
 97     return status;
 98
 99 }

我发现了一些障碍物等待功能,但它不起作用。(从glibc下载)
=>编译障碍时出现错误消息(结构变量不匹配)
=>我想知道这个错误是由版本引起的
我正在使用ubuntu 10.04
请告诉我为什么我的障碍很慢。
如何实现默认的pthread_barrier_wait(在我的平台中)

最佳答案

glibc的屏障是使用低级原语实现的,而不是互斥和条件。
基于互斥锁的实现有一个明显的问题,那就是它需要唤醒的每个线程重新获取互斥锁,而只需要释放它。这违背了屏障的精神:一个原始的第一阶级本身。(当然,这是一个很好的方法,可以快速完成一个脏兮兮的代码端口,该端口要求对只提供互斥和条件的平台设置障碍。)
顺便说一下,我写了十二年前在GLYBC中存在的第一个POSIX屏障函数。眨眼!

关于linux - 如何实现快速屏障?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10082212/

10-16 21:43