通过mmap放在共享内存中的信号量和直接在内核空间中的信号量的区别?

codinghuang
  • 142

在《Unix网络编程 卷二:进程间通信》第二版(中文版)的第253页的那段代码,作者通过mmap把信号量存放在一个共享内存中,然后父子进程间可以直接通过操作内存来获得信号量(不知道我这样理解对不对)。但是,内核此时应该还是会在背后对这个信号量操作吧?毕竟都对共享内存中的信号量调用了sem_wait函数。假设我理解的是对的,那把一个信号量放在共享内存中的意义又在哪里呢?
如果我理解的是错的,希望前辈们可以指出?

回复
阅读 1.8k
1 个回答

其实书中只是为了演示信号量的使用方法,除了能够使用有名信号量之外,还是使用基于内存的信号量。不需要纠结二者有何差别,只是用法上的不同。

往深了讲,信号量其实也是一个计数器,核外的程序使用的信号量也是通过系统调用到内核进行一个值的判断,大于 0 则不等待,等于 0 则等待有人 up 一下,唤醒正在等待的进程。

说白了,编程不论采用什么方式,只要能够拿到信号量就能使用,无论是将这个信号量计数器放在共享内存区域还是其他位置。

宣传栏