一个进程中可以有多个线程,这些线程共享进程的资源,但当多个线程访问同一个资源时,在并不能保证操作是原子的情况下,就会产生冲突而使数据最终的结果不准确,像上次我们提到的将一个数进行加1操作需要三步:将数据从内存中取出;将数据加1;再将数据放回内存中,当多个线程并发执行这一操作时,有可能一个线程刚将数据从内存中取出就被临时切换出去了,这时别的线程进行加1操作,而当被切出去的线程重新回来继续执行加1操作时,这个数据已经改变了但是它拿到的还是原来的值,再进行加1放回内存时,结果就和我们所期望达到的不一样了。
再有一个栗子就是接下来要谈到的生产者与消费者,生产者生产产品,消费者消费产品,它们之间会访问到一个共同的临界资源那就是产品,既然是临界资源,那就不得不提到互斥了,当生产者正在生产产品的时候消费者不能中途打断取走产品,因此二者之间是有一个互斥的关系,需要有一个互斥量来维护,下面可以举个栗子:
可以用链表来作为二者“交易”的场所,生产者将生产出来的产品放入链表,而消费者从链表中取走所需要的产品:
首先要创建出链表的结点并有初始化;
生产者要向链表中放入数据,实现一个函数push_node,用头插的方式插入数据;而消费者要从链表中取出数据,实现一个函数pop_node,用尾取的方式取走数据&