C 中的 Pthread 障碍是不是可重用?

Posted

技术标签:

【中文标题】C 中的 Pthread 障碍是不是可重用?【英文标题】:Are Pthread Barriers in C Reusable?C 中的 Pthread 障碍是否可重用? 【发布时间】:2016-07-19 00:40:39 【问题描述】:

所以我知道您可以在 C 中创建屏障来控制线程程序的流程。你可以初始化屏障,让你的线程使用它,然后销毁它。但是,我不确定是否可以重复使用相同的屏障(比如它是否在循环中)。或者您必须为第二个等待点使用新的屏障?例如,下面的代码是否正确(重复使用相同的屏障)?

#include <pthread.h>
pthread_barrier_t barrier;

void* thread_func (void *not_used) 
     //some code
     pthread_barrier_wait(&barrier);
     //some more code
     pthread_barrier_wait(&barrier);
     //even more code


int main() 
    pthread_barrier_init (&barrier, NULL, 2);
    pthread_t tid[2];
    pthread_create (&tid[0], NULL, thread_func, NULL);
    pthread_create (&tid[1], NULL, thread_func, NULL);
    pthread_join(tid[0], NULL);
    pthread_join(tid[1], NULL);
    pthread_barrier_destroy(&barrier);

【问题讨论】:

pthread_barrier_init返回的函数值是多少?还有其他功能吗? 屏障不是“控制流”,而是一个同步点。程序流程由条件语句等控制。 【参考方案1】:

是的,它们是可重复使用的。 man page says:

当所需数量的线程调用 pthread_barrier_wait()...屏障应为 重置为最近的状态 引用它的 pthread_barrier_init() 函数。

【讨论】:

以上是关于C 中的 Pthread 障碍是不是可重用?的主要内容,如果未能解决你的问题,请参考以下文章

此类中的数据库连接是不是“可重用”?

带有可重用项目的 UIScrollView

可重用的构造函数 C++

QML中的可重用字体属性[重复]

如何在运行时调用存储在HP ALM-QC中的可重用操作

如何重用 CRUD 方法中的可观察值