现在我实现了我的障碍。
但效果不太好。
当我运行屏障时间计算代码
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/