如何实现pthread_mutex_lock

时间:2011-02-23 19:06:04

标签: linux unix synchronization pthreads mutex

我很想知道如何在Unix中实现与线程之间的同步相关的函数。例如,当我致电pthread_mutex_lock时会发生什么?有没有使用指针?对源代码的引用确实会有所帮助。

2 个答案:

答案 0 :(得分:56)

它既复杂又不同于Unix变种。

例如,在Linux中,使用了一个名为Futex(Fast Users Space Mutex的简称)的系统。

在该系统中,对用户空间中的互斥变量执行原子增量和测试操作。

如果操作的结果表明锁没有争用,则对pthread_mutex_lock的调用将返回而不会将上下文切换到内核中,因此获取互斥锁的操作可能非常快。

只有在检测到争用时才会发生系统调用(称为futex)和上下文切换到内核,使调用进程进入休眠状态,直到释放互斥锁。

还有很多细节,特别是对于可靠和/或优先使用的互斥体,但这是它的本质。

有关详细信息,请参阅:http://linux.die.net/man/2/futexhttp://en.wikipedia.org/wiki/Futex

答案 1 :(得分:6)

在Linux上,pthreads可以通过libc获得。通常是glibc,源可用here

选中reference