Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux pthread_mutex_lock是如何实现的_Linux_Unix_Synchronization_Pthreads_Mutex - Fatal编程技术网

Linux pthread_mutex_lock是如何实现的

Linux pthread_mutex_lock是如何实现的,linux,unix,synchronization,pthreads,mutex,Linux,Unix,Synchronization,Pthreads,Mutex,我只是想知道与线程间同步相关的函数是如何在Unix中实现的。例如,当我调用pthread\u mutex\u lock时会发生什么?有什么指针在使用吗?参考源代码会很有帮助。它既复杂又不同于Unix变体 例如,在Linux中,使用了一个名为Futex(Fast Userspace Mutex的缩写)的系统 在该系统中,对用户空间中的互斥变量执行原子增量和测试操作 如果操作结果表明锁上没有争用,那么对pthread_mutex_lock的调用将返回,而不会将上下文切换到内核中,因此获取互斥锁的操作

我只是想知道与线程间同步相关的函数是如何在Unix中实现的。例如,当我调用
pthread\u mutex\u lock
时会发生什么?有什么指针在使用吗?参考源代码会很有帮助。

它既复杂又不同于Unix变体

例如,在Linux中,使用了一个名为Futex(Fast Userspace Mutex的缩写)的系统

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

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

只有当检测到争用时,才会进行系统调用(称为futex)并在内核中进行上下文切换,从而使调用进程处于休眠状态,直到释放互斥

还有更多的细节,特别是对于可靠和/或优先级固有互斥体,但这是它的本质


有关更多详细信息,请参见:和

在Linux上,pthreads可通过libc获得。通常是glibc,源代码是可用的


检查此项。

内核辅助的等待和唤醒操作使用了什么?