使用信号量来防止竞争条件(在C中)

时间:2012-04-20 04:06:26

标签: c semaphore

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

2 个答案:

答案 0 :(得分:1)

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

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

信号量还用于将事件从一个线程发送到另一个线程。 Mutex是信号量的变体,其中同一个线程获取并释放它(以保护关键部分或竞争条件)

请阅读以下详细信息

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

答案 1 :(得分:0)

我目前在我的Systems II类中讨论这个主题,它基本上使用C语言进行编程。正如我的讲师向我们解释的那样,信号量是一个非负整数同步变量,它本质上有助于保持某些线程函数。它有点像pthread_mutex函数,它试图在你的代码中保持线程... ahem - 是的,我知道它有些模糊,但是所有的信号量都用于调节线程活动,尤其是在使用相对较小的缓冲区时。希望我没有让你更加困惑(0_0)。

我的意思的几个例子:

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

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

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

- 最初名为V(),荷兰语为" Verhogen" (增量)

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

信用/引用:Phillips博士,约瑟夫,德保罗大学,讲座(2014)