面试中经常会考什么是信号量,对于linux,实际上有两种semaphore.
第一种是指一种IPC(Inter-process communication进程通讯)的方法。这种IPC是从Unix SYstem V时代开始的,System V发布时加入了三种IPC,它们是semaphore信号量,message queues消息队列,shared memory共享内存。
Linux中另一种Semaphore是内核用来同步的机制。在kernel中,semaphore通常当成一个二值信号量使用。获得信号量时有可能会睡眠,这样进程就会被调度开,放弃处理机;如果某段内核代码得到了一个信号量,这段代码还可以睡眠。这点不像spinlock,尝试得到spinlock会不停地忙等,得到spinlock后不充许睡眠。当然这个“不充许”不是语法层面的,而是应该被程序员遵守。否则整个系统的的性能就会被这代不遵守约定的代码毁掉了。
copyright ykyi.net