Mis*_*tyD 4 c++ multithreading boost mutex semaphore
阅读关于两者之间差异的各种帖子(互斥和信号量)我得出以下结论如果我错了请纠正我.这主要与windows有关.我知道关键部分是代码中需要保护的部分(即)多个线程不能同时访问.现在,为了保护这些关键部分,使用了互斥锁.这些互斥锁可以是算法或数据结构.现在,互斥体通常可以有两种形式(进程内和进程间).对于其中的内核没有呼吁锁定由我们可以使用内部流程加速线程同步原语,例如lock_guard,unique_lock,shared_lock(单作家/多读者)和进程间,我们可以使用 升压进程间的信号.现在这些进程间互斥基本上称为信号量.我之所以得出结论是因为这篇文章说明了这一点
信号量是信号机制("我做完了,你可以继续"的信号).例如,如果您正在移动设备上监听歌曲(假设它是一项任务),同时您的朋友打电话给您,则会触发中断,中断服务程序(ISR)将通知呼叫处理任务唤醒.
现在提升进程间状态
Boost.Interprocess实现了类似的机制来同步来自不同进程的线程.
如果我对信号量的理解方向正确,请告诉我.
现在,我不理解的信号量的另一个定义来自这里 选定的答案状态
信号量与互斥锁相同但允许x个线程进入.
哪个正确描述了信号量的作用?它是否允许进程间资源保护,还是允许特定数量的线程访问资源?如果确实如此,那么第二个不会破坏资源,因为多个线程正在访问它.
信号量是围绕整数值构建的同步机制.锁定信号量(通常称为"等待信号量")会减小该值,除非它为0.在这种情况下,线程会停止,直到信号量值大于0,因此可以正确地减少它.解锁信号量(通常称为"发布"或"信令")会无条件地将值增加1.
通常在创建信号量时,您需要为其分配一个起始值.如果设置的值大于1,则可以让多个线程通过信号量输入"受保护"的代码.
现在,互斥锁是二进制同步原语.从概念上讲,它可以与初始值为1的信号量进行比较.只有一个线程可以输入受互斥锁保护的代码.
我不知道Windows世界,但在Unix上,信号量是一种操作系统构造,它可以用来同步多个进程.Pthread互斥体通常用于协调单个进程中的线程,但有一些技巧允许使用互斥锁进行进程间同步(共享内存块和创建互斥锁的特殊方法).
| 归档时间: |
|
| 查看次数: |
5823 次 |
| 最近记录: |