Linux下线程间同步-四种机制 原创 Linux平台 2022年3月31日 12:03 夏至未至 794 当前内容 1000 字,在路上,马上到,马上到 ### 目录 [TOC] ### 何为线程间同步 线程间同步是指多线程通过特定的机制来控制线程之间的执行顺序,如果没有同步,线程之间是各自运行各自的,如果这样,对于某些场景,这将是灾难。 ### 为何需要线程同步 线程同步是为了对临界资源、共享资源合理、安全的访问。 ### 线程间同步方式 linux下线程间同步有如下几种方式(各方式具体介绍分开总结): #### 互斥锁 [互斥锁(互斥量)](https://www.codecomeon.com/posts/151/ "互斥锁(互斥量)"),每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束后解锁。资源还是共享的,线程间也还是竞争的,但通过锁将资源的访问变为互斥操作。本质就是一个特殊的全局变量。 #### 条件变量 [条件变量](https://www.codecomeon.com/posts/152/ "条件变量"),当线程在等待满足某些条件时使线程进入睡眠状态,一旦条件满足,就唤醒睡眠的线程,如此程序的效率无疑会大大提高,而这种方法正是条件变量,而互斥锁不太适合这种情况。 #### 读写锁 [读写锁(独占锁)](https://www.codecomeon.com/posts/155/ "读写锁(独占锁)"),可以多个线程同时读,但是不能多个线程同时写: 1. 读写锁适用于读操作次数多于写操作次数的场景 2. 读写锁比互斥锁更加具有适用性和并行性 3. 锁处于读模式时可以线程共享,而锁处于写模式时只能独占 读写锁有两种策略:强读同步和强写同步,不同的系统采用不同的策略,比如航班订票系统使用强写同步,图书馆查阅系统采用强读同步。 在强读同步中,总是给读者更高的优先权,只要写者没有进行写操作,读者就可以获得访问权限 在强写同步中,总是给写者更高的优先权,读者只能等到所有正在等待或者执行的写者完成后才能进行读 #### 信号量 [信号量](https://www.codecomeon.com/posts/156/ "信号量")(sem)和互斥锁的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程进入临界区 各方式具体操作见其统一标签:[线程间同步](https://www.codecomeon.com/tags/129/ "线程间同步") 本文标题: Linux下线程间同步-四种机制 本文作者: 夏至未至 发布时间: 2022年3月31日 12:03 最近更新: 2022年4月2日 16:13 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 线程间同步(5) 上一个 Linux下线程间同步-互斥锁 下一个 gcc/g++编译源文件生成可执行程序 当前文章评论暂未开放,请移步至留言处留言。