【发布时间】:2013-05-15 10:04:44
【问题描述】:
我知道 pthread_cond_wait 会解锁附带的互斥锁。我想定位的是 pthread_cond_wait 的源代码,并定位解锁互斥代码。如果问题很愚蠢,请裸露。 :)。我必须下载和检查哪个库。我正在使用 Ubuntu。
【问题讨论】:
我知道 pthread_cond_wait 会解锁附带的互斥锁。我想定位的是 pthread_cond_wait 的源代码,并定位解锁互斥代码。如果问题很愚蠢,请裸露。 :)。我必须下载和检查哪个库。我正在使用 Ubuntu。
【问题讨论】:
pthread_cond_* 函数和 pthread_mutex_* 函数是 NPTL 的一部分,现在在任何现代 Linux 机器上都是 glibc 的一部分。最新版本是glibc-2.11.1,你可以在GNU glibc download site找到源代码。
【讨论】:
另一种选择是 OpenSolaris source;如果您对 linux(即 glibc)感兴趣,那么@David Schwartz 的回答可能会更“准确”。
【讨论】:
虽然这不是您问题的确切答案,但互斥锁解锁发生方式的重要方面是它必须在 条件变量结构更新以反映服务员在当下。这就是标准所说的函数“原子地”解锁互斥锁并等待时的含义。否则,将存在相同的竞争条件,就好像您在调用 pthread_cond_wait 之前自己解锁了互斥锁一样:另一个线程可以获取互斥锁并在您检查谓词之后修改谓词所依赖的状态(发现它为假)但之前你打电话给pthread_cond_wait。然后你会错过信号并继续等待 cond var,也许永远。
【讨论】: