加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15267534595

SIEMENS吉安市西门子中国总代理商-西门子变频器伺服电机总代理

更新时间
2024-09-28 09:10:00
价格
请来电询价
变频器
西门子代理商
触摸屏
西门子一级代理
伺服电机
西门子一级总代理
联系电话
18126392341
联系手机
15267534595
联系人
梁涛
立即询价

详细介绍

在所有 Windows 资源同步对象中,CriticalSection(临界区对象,有时被翻译成“关键段”)都是Zui简单、易用的,能用于防止多线程同时执行其保护的那段代码(临界区代码),即临界区的代码在某一时刻只允许1个线程执行,示意图如下。

图片

Windows没有公开CriticalSection数据结构的定义,我们一般使用如下5个API函数操作临界区对象:








  • void InitializeCriticalSection(  [out] LPCRITICAL_SECTION lpCriticalSection);
    void DeleteCriticalSection(  [in, out] LPCRITICAL_SECTION lpCriticalSection);

    InitializeCriticalSection 和 DeleteCriticalSection 用于初始化和销毁 1 个 CRITICAL_SECTION 对象












  • BOOL TryEnterCriticalSection(  [in, out] LPCRITICAL_SECTION lpCriticalSection);
    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