多线程(2)什么是:互斥,同步,条件变量,原子操作?
1.什么是互斥?
互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
1.1 临界区 竞争条件
临界区 - 也称为临界段,就是访问和操作共享数据的代码段。
竞争条件 - 多个执行线程处于同一个临界区。
2.什么是同步?
安排进程执行的先后顺序就是同步,每个进程都有一定的个先后执行顺序
目的:避免并发和防止竞争条件
3.什么是原子/原子操作?
- 定义:
原子(atomic)本意是“不能被进一步分割的最小粒子”,
原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。 - 原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。这种操作一旦开始,就一直运行到结束
4.什么是条件变量?
-
条件变量作为一种同步手段,作用类似于一个栅栏。
-
线程有两种操作:
2.1 首先线程可以等待条件变量,一个条件变量可以被多个线程等待;
2.2 其次可以唤醒条件变量,此时某个或所有等待此条件变量的线程都会被唤醒并继续支持。 -
也就是说使用条件变量可以让许多线程一起等待某个事件发生,
当事件发生时(条件变量被唤醒),所有线程可以一起恢复执行。
参考
http://www.blogjava.net/fhtdy2004/archive/2009/07/05/285519.html