C++ 在关键部分、互斥锁和自旋锁之间进行选择
在选择关键部分、互斥锁和自旋锁时,需要记住哪些因素?所有这些都提供了同步功能,但是对于何时使用什么,是否有具体的指导方针C++ 在关键部分、互斥锁和自旋锁之间进行选择,c++,multithreading,C++,Multithreading,在选择关键部分、互斥锁和自旋锁时,需要记住哪些因素?所有这些都提供了同步功能,但是对于何时使用什么,是否有具体的指导方针 编辑:我指的是windows平台,因为它将关键部分视为同步结构。用windows的说法,关键部分是旋转锁和非忙等待的混合体。它旋转一小段时间,然后——如果它还没有抓住资源——它设置一个事件并等待它。如果资源争用率较低,则自旋锁行为通常就足够了 对于不需要担心与其他进程共享资源的多线程程序来说,关键部分是一个不错的选择 互斥锁是一种很好的通用锁。命名互斥体可用于控制多个进程之间
编辑:我指的是windows平台,因为它将关键部分视为同步结构。用windows的说法,关键部分是旋转锁和非忙等待的混合体。它旋转一小段时间,然后——如果它还没有抓住资源——它设置一个事件并等待它。如果资源争用率较低,则自旋锁行为通常就足够了 对于不需要担心与其他进程共享资源的多线程程序来说,关键部分是一个不错的选择 互斥锁是一种很好的通用锁。命名互斥体可用于控制多个进程之间的访问。但是,使用互斥锁通常比使用关键部分要贵一点。Windows中的互斥锁实际上是一种进程间并发机制,当用于进程内线程时,速度非常慢。A是Windows与您通常想到的互斥锁的类似物 当被争用的资源通常没有被持有相当数量的周期时,最好使用旋转锁,这意味着拥有锁的线程可能很快就会放弃它
编辑:我的答案只有在你的意思是“在Windows上”的情况下才相关,所以希望这就是你的意思。需要考虑的一般要点:
在windows上,关键部分速度快且特定于进程,互斥锁速度慢但跨进程。信号量提供了更复杂的用例。使用原子函数而不是锁可以非常有效地解决一些问题,例如从池中分配,例如在windows InterlocatedIncrement上,这确实非常快。可能重复,但可能不是OP想要的。不,我不希望在选择同步构造时记住这些差异,而是要记住一些要点。