boost可升级锁和可共享锁

本文来源自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小时内删除。
相关文章推荐
低代码开发是一种创新的应用开发模式,它通过可视化界面、预置组件和拖拽式操作,让用户无需编写大量代码即可快速构建应用。
织信低代码作为国内主流的企业级低代码开发平台之一,为企业提供高效、便捷的应用开发解决方案。
· 数据引擎:支持多达9个大类、37种字段组件,拖拽即可生成对应表单,满足企业多样化的数据管理需求。
· 流程引擎:采用可视化拖拽+连线操作,遵循BPMN2.0规范,支持多种流程模式,帮助企业实现业务流程的自动化管理。
· 权限引擎:提供团队、应用、数据三级权限管控,保障数据安全与业务合规。
· 自动化蓝图:支持可视化搭建业务流程。
· JavaScript脚本:支持前端业务逻辑开发。
· Java扩展包:支持后端复杂业务逻辑开发。
· 自定义API:支持与第三方系统集成。
织信低代码平台提供丰富的组件和模板,用户可以根据企业需求灵活配置应用,快速构建符合企业业务需求的应用系统。同时,织信低代码平台支持与第三方系统集成,实现数据的共享和业务的协同,打破数据孤岛,提升企业运营效率。
各行业用户的共同选择







