SIEMENS吉安市西门子中国总代理商-西门子变频器伺服电机总代理
| 更新时间 2025-01-19 09:10:00 价格 请来电询价 变频器 西门子代理商 触摸屏 西门子一级代理 伺服电机 西门子一级总代理 联系电话 18126392341 联系手机 15267534595 联系人 梁涛 立即询价 |
在所有 Windows 资源同步对象中,CriticalSection(临界区对象,有时被翻译成“关键段”)都是Zui简单、易用的,能用于防止多线程同时执行其保护的那段代码(临界区代码),即临界区的代码在某一时刻只允许1个线程执行,示意图如下。
Windows没有公开CriticalSection数据结构的定义,我们一般使用如下5个API函数操作临界区对象:
void DeleteCriticalSection( [in, out] LPCRITICAL_SECTION lpCriticalSection);
InitializeCriticalSection 和 DeleteCriticalSection 用于初始化和销毁 1 个 CRITICAL_SECTION 对象
void EnterCriticalSection( [in, out] LPCRITICAL_SECTION lpCriticalSection);
void LeaveCriticalSection( [in, out] LPCRITICAL_SECTION lpCriticalSection);
TryEnterCriticalSection会尝试进入临界区,如果可以进入,则函数返回TRUE;如果无法进入,则立即返回,不会阻塞调用线程,函数返回FALSE。
LeaveCriticalSection函数让调用的线程离开临界区,离开临界区以后,临界区的代码允许其他线程调用EnterCriticalSection进入。
EnterCriticalSection 和 LeaveCriticalSection 之间的代码即临界区代码;调用EnterCriticalSection的线程会尝试进入临界区,如果进入不了,则会阻塞调用线程,直到成功进入或者超时。代码允许其他线程调用EnterCriticalSection进入。
EnterCriticalSection 的超时时间很长,可以在注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager 位置修改参数 CriticalSectionTimeout的值进行调整,当然,在实际开发中我们从来不会修改这个值,如果代码等待时间较长且Zui终超时,就需要检查逻辑设计是否合理。
联系方式
- 电 话:18126392341
- 联系人:梁涛
- 手 机:15267534595
- 微 信:15267534595