线程同步之关键段

18 篇文章 0 订阅

From:http://blog.csdn.net/ilovethissite/article/details/8505606

1.关键段共初始化化、销毁、进入和离开关键区域四个函数。

初始化:void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

销毁:void DeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

进入关键区域:void EnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);

离开关关键区域void LeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);


2.关键段可以解决线程的互斥问题,但因为具有“线程所有权”,所以无法解决线程同步问题。


3.推荐关键段与旋转锁配合使用。以下为旋转锁的一些函数介绍:

函数功能:初始化关键段并设置旋转次数

BOOLInitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTIONlpCriticalSection,  DWORDdwSpinCount);

函数说明:旋转次数一般设置为4000

 函数功能:修改关键段的旋转次数

DWORDSetCriticalSectionSpinCount( LPCRITICAL_SECTIONlpCriticalSection,  DWORDdwSpinCount);

《Windows核心编程》第五版的第八章推荐在使用关键段的时候同时使用旋转锁,这样有助于提高性能。值得注意的是如果主机只有一个处理器,那么设置旋转锁是无效的。无法进入关键区域的线程总会被系统将其切换到等待状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值