每日一博 | 互斥那点事儿(下)
“我找到好办法了!” 没有想到,说话的人竟然是磁盘! 进程调度器瑟瑟的说:“你有方法?还是算了吧,我怕用你的方法操作系统要乱套了。” 磁盘委屈的道:“不就是刚刚冤枉你了吗,这么小气干什么!再说了,这个方法不是我想出来的,是我从文件里找到的。” 操作系统挑了挑眉毛:“哦?你找到什么文件了,让大家也瞅瞅?” 磁盘嗡嗡的转起来,很快就把文件取出来了。 “当当当当~ 这可是大师 Dijkstra 的论文,他引入了一个全新的变量类型——信号量(semaphore)。然后还为信号量设置了两种操作,P(proberen,检测) 和 V(verhogen,增量) 。” ”说清楚点啊,信号量是怎么个用法啊?“进程急切的问道。 “别急,让我接着看。。。Dijkstra 提出,P操作是检测信号量是否为正值,如果不是,就阻塞调用进程。 V操作能唤醒一个阻塞进程,让他恢复执行 。具体点的话就是这样: “ // S 为信号量 P(s): { S = S - 1 if (S < 0) { 调用该 P 操作的进程阻塞,并插入相应的阻塞队列; } } // S 为信号量 V(s): { S = S + 1 if ...
