pthread_mutex_lock 是如何实现的
- 2024-11-13 08:36:00
- admin 原创
- 158
问题描述:
我只是好奇想知道与线程间同步相关的函数在 Unix 内部是如何实现的。例如,当我调用时会发生什么pthread_mutex_lock
?是否有任何指针在使用?对源代码的引用确实会有所帮助。
解决方案 1:
它很复杂并且不同 Unix 版本之间存在差异。
例如,在 Linux 中,使用了一种称为 Futex(快速用户空间互斥体的缩写)的系统。
在该系统中,对用户空间中的互斥变量执行原子增量和测试操作。
如果操作结果表明锁上没有争用,则对 pthread_mutex_lock 的调用将返回,而无需上下文切换到内核,因此获取互斥锁的操作可以非常快。
仅当检测到争用时,才会发生系统调用(称为 futex)和上下文切换到内核,从而使调用进程处于休眠状态,直到互斥锁被释放。
还有许多细节,特别是对于可靠和/或优先级继承互斥锁,但这是它的本质。
有关更多详细信息,请参阅:http://linux.die.net/man/2/futex和http://en.wikipedia.org/wiki/Futex
解决方案 2:
在 Linux 上,pthreads 可通过 libc 获得。通常是 glibc,源代码可在此处获得!
检查此参考。
解决方案 3:
我建议阅读:
https://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf
来自https://pages.cs.wisc.edu/~remzi/OSTEP/。
我认为如果不读一些好的文章就无法很好地解释和理解它。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD