Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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 kernel down_read(信号量)在内核中是如何工作的?_Linux Kernel_Kernel_Semaphore - Fatal编程技术网

Linux kernel down_read(信号量)在内核中是如何工作的?

Linux kernel down_read(信号量)在内核中是如何工作的?,linux-kernel,kernel,semaphore,Linux Kernel,Kernel,Semaphore,如果我们让一个线程通过down\u read(¤t->mm->mmap\u sem)函数持有信号量,它提供对mmap(vma区域列表)的只读访问,因此其他线程不能再更改mmap。我正在阅读源代码,但仍然不清楚down\u read是如何实现的。基本思想是: 自由锁=0 向下读取()递减锁定-每个阅读器1个(只有在您调查的是什么内核版本的情况下?Linux内核代码变化相对较快。@Tsyvarev感谢您的回答。内核2.4.26。rw_信号量只是,读写器使用不同类型的关键部分。读关键部分可

如果我们让一个线程通过
down\u read(¤t->mm->mmap\u sem)
函数持有信号量,它提供对
mmap
(vma区域列表)的只读访问,因此其他线程不能再更改
mmap
。我正在阅读源代码,但仍然不清楚down\u read是如何实现的。

基本思想是: 自由锁=0


向下读取()递减锁定-每个阅读器1个(只有在您调查的是什么内核版本的情况下?Linux内核代码变化相对较快。@Tsyvarev感谢您的回答。内核2.4.26。
rw_信号量
只是,读写器使用不同类型的关键部分。读关键部分可以同时wrt执行。读关键部分可以彼此执行,但写关键部分可以b仅以独占方式执行(关于写和读关键部分)。
down\u read
获得读锁。其实际实现依赖于架构(出于性能原因),但除了锁开发人员之外,很少有人感兴趣。