关键部分:
当多个进程访问同一代码段时,该段称为临界区。临界区包含需要同步以保持数据变量一致性的共享变量或资源。
简单来说,临界区是一组需要原子性执行的指令/语句或代码区域(阅读这篇文章以获得原子性),例如访问资源(文件、输入或输出端口、全局数据等)。
在并发编程中,如果一个线程试图在另一个线程试图读取共享数据的值的同时改变共享数据的值(即跨线程的数据竞争),结果是不可预测的。
对要同步的此类共享变量(共享内存、共享文件、共享端口等)的访问。很少有编程语言具有内置的同步支持。
在编写内核模式编程(设备驱动程序、内核线程等)时,了解竞争条件的重要性至关重要。因为程序员可以直接访问和修改内核数据结构。
临界区的一个简单解决方案可以被认为如下所示,
acquireLock();
Process Critical Section
releaseLock();
线程必须在执行临界区之前获得锁。锁只能被一个线程获取。上述伪代码中有多种实现锁的方式。让我们在以后的文章中讨论它们。