一、为什么要有并发和互斥控制?
并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态 。
解决竞态问题的途径是保证对共享资源的互斥访问。
所谓互斥访问就是指一个执行单元在访问共享资源的时候,其他的执行单元都被禁止访问。
二、如何实现互斥访问?
访问共享资源的代码区域被称为临界区, 临界区需要以某种互斥机制加以保护,中断屏蔽,原子操作,自旋锁,和信号量都是 linux 设备驱动中可采用的互斥途径。
临界区是底层的实现代码,对于文件来说就是底层写入执行代码。多个线程都可能需要访问临界区进行写入。
三、举例
比如你们公司有一台打印机,你们公司的所有人都可以使用。现在小李和小王要同时使用这一台打印机,都要打印一份文件。
当两个人同时打印的话如果打印机不做处理的话可能会出现小李的文档打印了一行,然后开始打印小王的文档,这样打印出来的文档就错乱。
如果有多人同时向打印机发送了多份文档,打印机必须保证一次只能打印一份文档,只有打印完成以后才能打印其他的文档。