俗话说,一种口味久了,也会腻,那么今天咱们换换口味。^_^
PS:今天的文章比较干货,涉及到了比较底层的内容,可能看一篇不太懂的,建议多看几遍,我相信你会豁然开朗。如果想在IT这条路走得更远,那么这篇就更加要看了。
一:信号量的本质
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。
二:信号量机制的功能
进程间通信处理同步互斥的机制。信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
三:PV操作的含义
PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),针对信号量进行相应的操作。
四:PV操作的定义
其中S表示信号量的值,P表示P操作,V表示V操作; P(S):
①将信号量S的值减1,即进行S = S-1; ②如果S < 0,则该进程进入阻塞队列;
③如果S >= 0, 则该进程继续执行;
④执行一次P操作其实就是意味请求分配一个资源,所以针对②和③来说就好理解了,当信号量的值小于0,那么就表示没有可用资源,那么进程就只能进行等待其他拥有该资源的进程释放资源之后,才能进行执行;当信号量大于0的时候,那么表示还有足够的资源,所以,当前进程就可以继续执行; V(S):
①将信号量S的值加1,即 S = S + 1; ②如果S > 0,则该进程继续执行;
③如果S < 0, 则释放阻塞