EnterCriticalSection和LeaveCriticalSection是干嘛用的?如果多个线程操作相同的数据(内存块),通常需要按顺序访问。 否则,数据会混乱,无法控制数据,成为随机变量。 要解决此问题,必须引入互斥变量,以允许每个线程按顺序访问变量。 这两个函数实现了这样的功能。
作用域:不同线程之间代码段的
什么是关键部分? 关键部分是一种轻量级机制,允许在给定时间内只有一个线程执行特定的代码段。 通常,临界区域用于更改全局数据(如集合类)。 事件、多用户终端可执行文件和信号量也用于多线程同步,但关键部分与它们不同,它们并不总是执行到内核模式的控制转换,而且这种转换成本高昂。 要获得未使用的临界区域,实际上只需对内存进行少量更改,其速度非常快。 只有在尝试获取被占用的极限空间时,才会跳转到内核模式。 此轻量级特性的缺点是关键节只能用于同步同一进程中的线程。
在不使用关键节的理想情况下,EnterCriticalSection调用速度非常快,因为它只是读取和更改用户模式内存中的内存位置。
如果一个临界区域中有多个线程被阻止,则当另一个线程释放该临界区域时,只有一个线程获得该临界区域。
临界区API:初始化和删除临界区:初始化临界区(deletecriticalsection )临界区的两个操作原语:企业临界区
对于临界区操作,(EnterCriticalSection )操作采用主动进入临界区。 也就是说,不能进入的时候,在进入之前会继续积极地尝试进入。 这种积极的进入方式叫做自旋。 被动方式:无法获取后,进入队列,待获取的对象释放后,系统唤醒等待线程的方式称为被动方式。