多线程(2)什么是:互斥,同步,条件变量,原子操作?
1.什么是互斥?
互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
2.什么是同步?
- 同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
- 在大多数情况下,同步已经实现了互斥, 特别是所有写入资源的情况必定是互斥的。
- 少数情况是指可以允许多个访问者同时访问资源
3.什么是原子/原子操作?
- 定义:
原子(atomic)本意是“不能被进一步分割的最小粒子”,
原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。 - 原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。这种操作一旦开始,就一直运行到结束
4.什么是条件变量?
-
条件变量作为一种同步手段,作用类似于一个栅栏。
-
线程有两种操作:
2.1 首先线程可以等待条件变量,一个条件变量可以被多个线程等待;
2.2 其次可以唤醒条件变量,此时某个或所有等待此条件变量的线程都会被唤醒并继续支持。 -
也就是说使用条件变量可以让许多线程一起等待某个事件发生,
当事件发生时(条件变量被唤醒),所有线程可以一起恢复执行。
参考
http://www.blogjava.net/fhtdy2004/archive/2009/07/05/285519.html