Concurrency 进程同步和计数信号量
我正在学习计算信号量,但不理解它。我读了几乎所有的文章,但还是很难理解 以下是我对马桶钥匙的理解示例() 这里, 厕所-临界区 键信号量 人-过程 如果我在上述方面有错,请纠正我。我的问题是: 1) “信号量将共享资源的同时用户数量限制为最大数量”。对共享变量的同时访问不会导致竞相条件吗 2) 进程获取信号量后,它是否会在关键部分运行?(基于示例) 3) 如果一个进程在它的CS中,而另一个进程获取了信号量,那么它是同时运行它的CS还是在等待Concurrency 进程同步和计数信号量,concurrency,process,synchronization,semaphore,critical-section,Concurrency,Process,Synchronization,Semaphore,Critical Section,我正在学习计算信号量,但不理解它。我读了几乎所有的文章,但还是很难理解 以下是我对马桶钥匙的理解示例() 这里, 厕所-临界区 键信号量 人-过程 如果我在上述方面有错,请纠正我。我的问题是: 1) “信号量将共享资源的同时用户数量限制为最大数量”。对共享变量的同时访问不会导致竞相条件吗 2) 进程获取信号量后,它是否会在关键部分运行?(基于示例) 3) 如果一个进程在它的CS中,而另一个进程获取了信号量,那么它是同时运行它的CS还是在等待 如果我的问题是基本的,请原谅,但我正在努力理解。请用一
如果我的问题是基本的,请原谅,但我正在努力理解。请用一个例子解释信号灯?假设有一个贵宾室。房间里最多可以有3个人。将你的信号灯设置为3 信号灯是你的保镖,防止第四个人进入房间 它是如何工作的?您可以使用信号量调用两个函数:
wait()
和signal()
wait()。如果新值为负值,则必须等待该值再次为正值
所以你从信号量=3开始。随着每个人进入房间,它减少了1
第1人进入……sem=2
第2人进入……sem=1
第三人进入……sem=0
第四个人试图进去,但现在sem=-1,我们的保镖不让他进去。所以,他必须等待直到有人离开房间
当你处理完关键部分后,你可以signal()
让外人知道他现在可以进入了。如您所知,此函数将信号量值增加1
互斥量是信号量=1
线程A:
mutex.wait(); //makes mutex = 0
CS();
mutex.signal();
线程B:
mutex.wait(); //has to wait until A signals so the mutex = 1 again
CS();
mutex.signal();
在这个实现中,当A运行时,B无法到达CS,在CS中他使用上下文开关更改一些全局变量。B必须等到A完成。反之亦然
为了更好地理解信号量,您可以检查著名的问题,如生产者和消费者、理发店、餐饮哲学家。。。有很多。我相信这样会更有趣,场景会让你更容易理解。
而且,我认为这是非常有用的
希望这有帮助