线程同步
来源:互联网 发布:新浪博客怎么seo 编辑:程序博客网 时间:2024/05/29 13:07
当多个控制线程共享相同的内存时,当一个线程可以修改的变量,其他线程也可以读取该变量或者修改时,就需要对这些线程进行同步,确保它们在访问变量的存储内容时不会访问到无效的值。
互斥量
互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行设置(加锁),在访问完成后释放(解锁)互斥量。
避免死锁
如果线程试图对同一个互斥量加锁两次,那么它自身就会陷入死锁状态;或者两个线程都在相互请求另一个线程拥有的资源,所以这两个线程都无法向前运行,于是就产生死锁。
可以通过仔细控制互斥量加锁的顺序来避免死锁的产生。
读写锁
读写锁(reader-writer lock)与互斥锁类似,不过读写锁允许更高的并行性。
互斥锁只有两种状态(锁与不锁),而且一次只有一个线程可以对其加锁。
读写锁可以有3种状态:
- 读模式下加锁状态
- 写模式下加锁状态
- 不加锁状态
一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁。
读写锁适用于对数据结构读的次数远大于写的情况。
条件变量
条件变量是与互斥量一起使用的,允许线程以无竞争的方式等待特定的条件发生。它可以阻塞一个或同时阻塞多个线程直到:
- 收到来自其他线程的通知
- 超时
- 发生虚假唤醒(Spurious Wakeup)
自旋锁
自旋锁与互斥量类似,但它不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等(自旋)阻塞状态。自旋锁可用于锁被持有的时间短,而且线程不希望在重新调度上花费太多的成本。
屏障
屏障是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从该点继续执行。
0 0
- 线程同步--线程同步--线程同步--线程同步--线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- 线程同步
- JavaSript对象-创建对象
- TI的CCS的一个编译错误
- maven插件之maven-javadoc-plugin
- draw9patch使用问题
- JavaScript对象——对象属性
- 线程同步
- LayoutInflater 到底怎么把xml添加到decorview
- Linux 定时任务Crontab
- 朋友(特长生准备)
- maven插件之maven-source-plugin
- JavaScript类型检测
- 【C#】S.O.L.I.D
- JavaScript对象——对象的继承
- Java基础类库