【发布时间】:2015-01-23 01:50:21
【问题描述】:
阅读关于SO的各种帖子(互斥量和信号量)我得出以下结论,如果我错了,请纠正我。这主要与Windows有关。我了解关键部分是代码中需要保护的部分(即多个线程不能同时访问)。现在为了保护那些关键部分,互斥体被使用了。这些互斥锁可以是算法或数据结构。现在互斥锁通常可以有两种形式(进程内和进程间)。对于没有调用内核进行锁定的内部进程,我们可以使用Boost Thread synchronization primitives,例如lock_guard、unique_lock、shared_lock(单写/多读),对于进程间,我们可以使用@987654322 @.现在这些进程间互斥体基本上被称为信号量。我得出结论的原因
是因为this post 声明
信号量是信号机制(“我完成了,你可以继续”的那种 信号)。例如,如果您正在听歌曲(假设它是一首 任务)在您的手机上,同时您的朋友给您打电话, 中断将被触发,其上的中断服务程序 (ISR) 将通知呼叫处理任务唤醒。
现在提升进程间状态
.. Boost.Interprocess 实现了类似的同步机制 来自不同进程的线程。
如果我对信号量的理解方向正确,请告诉我。
现在我不明白的信号量的另一个定义来自here 选择的答案状态
信号量与互斥量相同,但允许 x 个线程 输入。
哪个正确描述了信号量的作用?它允许进程间资源保护还是允许特定数量的线程访问资源?如果是第二个,它不会破坏资源,因为多个线程正在访问它。
【问题讨论】:
-
在 Windows 中,信号量是一个事件,请参阅 CreateEvent
-
可以在这里找到一个很好的解释:koti.mbnet.fi/niclasw/MutexSemaphore.html 底线:互斥锁是一个值为 1 的信号量。基本上,资源是由多个线程还是由多个进程访问都没有关系。访问内存时存在差异,但这是另一个问题。
标签: c++ multithreading boost mutex semaphore