文章出处:http://www.linuxidc.com/Linux/2011-03/33227.htm
http://blog.163.com/helloworld_zhouli/blog/static/2033711212012240502579/
任务间的关系有两种:
1. 直接关系;
2. 间接关系;
例如:
1. 任务A对某个缓冲区进行写操作,任务B从这个缓冲区进行读操作。那么A和B的关系就是直接的关系,那么,实现这种直接关系的机制就是同步;
2. 任务A要使用打印机,任务B也要使用打印机,那么,只有在任务A使用结束的情况下任务B才能使用打印机,所以A和B间的关系是间接的关系,要实现这种间接的关系的机制是互斥;
在linux中,实现线程间的互斥和同步的主要机制是:互斥锁和条件变量。
条件变量用于线程需要在某种条件下才去保护它将要操作的临界区的情况下,从而避免了线程不断轮询检查该条件是否成立而降低效率;
条件变量的一个典型应用场景是生产者与消费者模式:
消费者线程获取互斥锁进入临界区后,判断若此时没有可以消费的产品,则解锁进入等待模式,当生产者线程生产出一个新的产品后就发送信号通知消费者继续工作,这样就达到了对临界区操作的互斥保护和线程间同步的作用。