我只是想知道Unix内部如何实现线程间同步相关的功能。例如,当我打电话时会发生什么pthread_mutex_lock
?有使用中的指针吗?参考源代码确实会有帮助。
它既复杂又因 Unix 变体而异。
例如,在 Linux 中,使用称为 Futex(快速用户空间互斥体的缩写)的系统。
在该系统中,对用户空间中的互斥变量执行原子增量和测试操作。
如果操作结果表明不存在锁争用,则对 pthread_mutex_lock 的调用将返回,而无需上下文切换到内核,因此获取互斥锁的操作可以非常快。
仅当检测到争用时,才会发生系统调用(称为 futex)并将上下文切换到内核,从而使调用进程进入睡眠状态,直到释放互斥体。
还有更多细节,特别是对于可靠和/或优先级继承互斥体,但这就是它的本质。
欲了解更多详情,请参阅:http://linux.die.net/man/2/futex http://linux.die.net/man/2/futex and http://en.wikipedia.org/wiki/Futex http://en.wikipedia.org/wiki/Futex
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)