2

所以,这是一个非常简单的问题。我正在尝试使用信号量来防止竞争条件。我尝试阅读手册页,但它们确实令人困惑。有人可以提供一个简单的解释他们是如何工作的吗?

4

2 回答 2

1

我假设您在 Linux/Unix 中使用。信号量用于控制/限制从多个线程对共享资源(比如说全局变量)的访问。一个线程可以获取信号量,修改值并释放它如果另一个线程试图访问该变量,它应该获取信号量,如果它已经被获取,它被挂起并在前一个线程放弃控制后获得访问权。

这种方式信号量用于操作的排序和变量的完整性。

信号量也用于从一个线程向另一个线程发送事件信号。互斥量是信号量的变体,同一线程获取并释放它(以保护临界区或竞争条件)

在下面阅读更多详细信息

https://www.sao.ru/hq/sts/linux/doc/ipc_guide/semaphores.html

于 2012-04-20T04:12:23.620 回答
0

我目前正在我的 Systems II 课程中讨论这个主题,该课程基本上使用 C 语言进行编程。正如我的导师向我们解释的那样,信号量是一个非负整数同步变量,它本质上有助于控制某些线程函数。它的工作方式有点像 pthread_mutex 函数,它试图在你的代码中保持线程受到监管......嗯 - 是的,我知道它有点晦涩,但总而言之的信号量用于调节线程活动,尤其是在使用相对较小的缓冲区时. 希望我没有让您更加困惑(0_0)。

我的意思的几个例子:

– 信号量:非负整数同步变量。

• sem_wait(s): [ while(s==0) wait(); s--; ] – 最初命名为 P(),荷兰语为“Proberen”(测试)

• sem_post(s):[ s++;]

– 最初命名为 V(),荷兰语为“Verhogen”(增量)

– OS 保证括号 [ ] 之间的操作不可分割地执行。

信用/引文:菲利普斯博士,约瑟夫,德保罗大学,讲座(2014 年)

于 2014-10-09T01:20:40.390 回答