我很想知道如何在Unix中实现与线程之间的同步相关的函数。例如,当我致电pthread_mutex_lock
时会发生什么?有没有使用指针?对源代码的引用确实会有所帮助。
答案 0 :(得分:56)
它既复杂又不同于Unix变种。
例如,在Linux中,使用了一个名为Futex(Fast Users Space Mutex的简称)的系统。
在该系统中,对用户空间中的互斥变量执行原子增量和测试操作。
如果操作的结果表明锁没有争用,则对pthread_mutex_lock的调用将返回而不会将上下文切换到内核中,因此获取互斥锁的操作可能非常快。
只有在检测到争用时才会发生系统调用(称为futex)和上下文切换到内核,使调用进程进入休眠状态,直到释放互斥锁。
还有很多细节,特别是对于可靠和/或优先使用的互斥体,但这是它的本质。
有关详细信息,请参阅:http://linux.die.net/man/2/futex和http://en.wikipedia.org/wiki/Futex
答案 1 :(得分:6)