使用一个pthread_mutex_t并将pthread_cond_t与pthread_cond_wait()相乘

Yan*_*aud 4 unix posix mutex pthreads conditional-statements

根据Open Group Base Specifications Issue 7,IEEE Std 1003.1-2008,单个条件变量(pthread_cond_t)不应该沿着不同的互斥锁(pthread_mutex_t)使用,pthread_cond_wait()而至少有一个线程正在等待这个条件变量:例如.pthread_cond_wait(&cond1, &mutex1)不能与pthread_cond_wait(&cond1, &mutex2)以下内容并行使用:此行为未指定.

但是,如果允许使用具有多个条件变量的单个互斥锁,则不指定,例如:pthread_cond_wait(&cond1, &mutex1)与...并行pthread_cond_wait(&cond2, &mutex1).

我认为应该避免这种结构以保证安全(双向)

在该互斥锁和条件变量之间形成的动态绑定

有人可以评论这个问题吗?

Dav*_*har 11

将相同的互斥锁用于多个条件变量完全没问题,反之亦然.

考虑这一点的一种方法是:合同的一部分pthread_cond_wait是,当调用线程从其等待唤醒时,它将拥有锁定的互斥锁,这只有在与条件变量关联的一个互斥锁时才有意义.

要了解您可能想要执行此操作的原因,请设想一个设计,其中有多个全局计数器受单个互斥锁(用户数,打开文件数等)保护.然后,你可以合理地拥有多个你可能想要等待的条件变量,所有这些变量都与该单个互斥量相关联:

pthread_cond_wait(&usercount_lessthan_limit_cond, &global_mutex);
...
pthread_cond_wait(&openfilecount_lessthan_limit_cond, &global_mutex);
...etc...
Run Code Online (Sandbox Code Playgroud)