Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么是;邮政「;在sem_post中代表什么?_C_Multithreading - Fatal编程技术网

C 什么是;邮政「;在sem_post中代表什么?

C 什么是;邮政「;在sem_post中代表什么?,c,multithreading,C,Multithreading,我是新来C的,如果我的问题听起来很愚蠢,对不起。 我们知道,sem\u post函数解锁信号量,但为什么这样调用它,被称为sem\u unlock不是更合适吗,我不认为“post”有“unlock”的意思吗?我一直认为它是“post”一词,就像在“post a message”中一样,因为您实际上是在向等待运行或可能要运行的某个进程发送信号 维基百科试图解释原始的V(post)和p(wait)操作名称;显然,它们是荷兰语单词的单字母缩写,但我们不确定是哪个单词,虽然这可能对英语单词的选择没有多大

我是新来C的,如果我的问题听起来很愚蠢,对不起。
我们知道,
sem\u post
函数解锁信号量,但为什么这样调用它,被称为
sem\u unlock
不是更合适吗,我不认为“post”有“unlock”的意思吗?

我一直认为它是“post”一词,就像在“post a message”中一样,因为您实际上是在向等待运行或可能要运行的某个进程发送信号


维基百科试图解释原始的
V
(post)和
p
(wait)操作名称;显然,它们是荷兰语单词的单字母缩写,但我们不确定是哪个单词,虽然这可能对英语单词的选择没有多大帮助。

Passen/vrijgeven似乎是最好的解释。帕塞伦有点模棱两可(甚至在荷兰语中也可能太神秘)。Post/Release可能是最好的英语隐喻。P(Passeen)的另一个翻译是“通过,前进。”(就像在一个检查站)@wildplasser:但是“P”是“等待”,而不是“发布”。如果“passereen”对这两个词都有效,那肯定是模棱两可的。真正需要的是“允许某人通过”,这在我所知道的任何语言中都不容易用一个简短的词来恢复。(
sem_goforit
可能不是一个成功的建议。)那么,“请求通过”可能会更好。(它能阻止吗?是的:它能!)也许RFC IAC的措辞更简单(DO/don/WILL/WONT)“你实际上是在向某个等待运行的进程发送一个信号”嗯,不是真的。无论是否有等待的线程/进程,您都在向信号灯发送一个单元,就像通过信箱发送一张便条一样——即使在您发送时没有人在家,它也会一直放在那里,直到有人捡起它,以及其他人(可能是其他人)发送的任何信件。这与解锁门形成对比——如果有人发现门没有锁,他不知道解锁尝试了多少次,只知道至少有一次。@martin:那么你同意“发布”和“发布消息”一样是“发布”了吗:-)我将研究消息接收者的措辞。当信号量的计数已经大于零时,您可以向信号量发送另一个单位,而传统上,您无法解锁已经解锁的门。”“post”很好——你可以在一个邮箱中投递多封信,收件人可以得到所有的信,并且需要逐个打开。使用它作为“锁”只是使用信号灯的许多不同方式之一。在我看来,考虑信号量的最佳方式是将其视为无信息令牌的阻塞队列。
sem_post
方法向队列添加一个令牌,
sem_wait
方法在必要时等待,直到队列包含至少一个令牌,然后从队列中删除一个令牌,然后返回。