一、引言
有没有人跟我一样,在学习信号量的时候,曾经问过自己这么一个问题:
信号量的 P/V 操作,为什么要这么命名
P 代表了哪个单词,V 又代表了哪个单词。问了自己之后,仿佛又找不到对应的英文单词能够方便记忆,于是乎只能通过死记硬背来记住。
二、探索
直到,我看到了《Linux程序设计(第四版)》第 14 章,才知道了真正的答案(以下摘自第 14.1 章节):
信号量的一个更正式的定义是:它是一个特殊变量,只允许对它进行等待(wait)和发送信号(signal)这两种操作。因为在 Linux 编程中,“等待” 和 “发送信号” 都已具有特殊的含义,所以我们将用原先定义的符号来表示这两种操作
P(信号量变量):用于等待。
V(信号量变量):用于发送信号。
这两个字母分别来自于荷兰语单词 passeren(传递,就好像位于进入临界区域之前的检查点)和 vrijgeven(给予或释放,就好像放弃对临界区域的控制权)。
也就是说,P 来自于荷兰语 Passeren,意味着进入临界区域,V 来自于荷兰语 vrijgeven,意味着放弃临界区域。
那么问题由来了,为啥是荷兰语呢?
因为信号量的概念就是荷兰计算机科学家 Edsger Dijkstra 提出来的,信号量的概念是并发编程领域的一大重大的进步。
可能有人会觉得 Dijkstra 非常的熟悉,仿佛就好像是 Dijkstra 算法的命名,是的,就是他,就是那个迪杰特斯拉算法的作者,也就是他提出来了信号量!!!
很有趣吧,你会发现,计算机科学领域里面的哪怕是一个技术的惯用命名,都有着深厚的历史渊源。偶尔去探索一下,都会发现不少有趣的信息。
To be Stronger:)