本文来源自boost官网
https://www.boost.org/doc/libs/1_75_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.sharable_upgradable_mutexes.upgradable_whats_a_mutex
可升级锁和可共享锁比普通的线程锁提供了更多的功能。一般编程的时候我们可以区分是自己的代码是要读数据还是写数据。如果只有部分线程需要写数据,那普通互斥锁可能会降低代码并行的效率。假如两个线程只需要读数据,那么这两个线程也没有办法并行运行。然而实际上,他俩并不会相互影响。
如果我们提供一种方式,允许并行读,禁止并行写,那么就可以解决这个问题。下面介绍几种线程锁
独占锁:与普通互斥锁类似,如果一个线程获取了独占锁,其他的线程均不能获取任何锁(包括独占锁或者其他锁), 如果任何其他线程拥有除独占锁以外的其他锁,试图获取独占锁的线程将被阻塞。需要写数据的线程应该获取独占锁。
共享锁:如果一个线程获取了共享锁,其他的线程则不能再获取独占锁。如果有线程获取了独占锁,那么其他想获取共享锁的线程将被阻塞。只需要读数据的线程应该获取这种锁。
可升级锁:如果一个线程获取了可升级锁,其他线程可以获取共享锁。如果一个线程获取了独占锁,或者是可升级锁,另一个想要获取可升级锁的线程将被阻塞。当一个线程获取了可升级锁,那么当其他线程想要获取一个与之有关的共享锁的时候,它会被确保升级为独占锁。这种特性适用于那种读操作占比高,但是还是会夹杂一些写操作的线程。当一个线程获取了可升级锁,其他线程可以获取共享锁。如果此线程在读取数据之后,又需要修改,当所有共享锁都被释放之后。这个可升级锁会原子性的升级为一个独占锁。之后这个线程可以修改数据,并且能保证在修改的时候没有其他线程修改过此数据。只有一个线程可以获取可升级锁
任务调度
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除侵权内容。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。