多线程学习笔记 四

 多线程学习笔记 四 之 Critical Sections(关键区域、临界区域)
 multithreading applications in Win32 P115
 在 Win32程序中你可以为每一个需要保护的资源声明一个 CRITICAL_SECTION 类型的变量。这个变量
 扮演红绿灯的角色,让同一时间内只有一个线程进入 critical section 。Critical Section 并不
 是核心对象。你应该做的是将一个类型为 CRITICAL_SECTION 的局部变量初始化,方法是调用
 InitializeCriticalSection();

 VOID InitializeCriticalSection (
                                  LPCRITICAL_SECTION lpCriticalSection );
 参数说明:
 lpCriticalSection 一个指针,指向预被初始化的 CRITICAL_SECTION 变量。这个变量应该在你的
                   程序中定义。

 当你用毕 critical section 时,你必须调用 DeleteCriticalSection() 清除它。这个函数并没有
 ’释放对象‘的意义在里头,不要把它和 C++  的 delete 运算符混淆了。

 VOID DeleteCriticalSection (
                              LPCRITICAL_SECTION lpCriticalSection );
 参数:
 lpCriticalSection 指向一个不再需要的 CRITICAL_SECTION 变量。
 
 示例:
 CRITICAL_SECTION gCriticalSection;
 void CreateDeleteCriticalSection()
 {
   InitializeCriticalSection(&gCriticalSection);
   /*Do something here */
   DeleteCriticalSection(&gCriticalSection);
 }

 一旦 critical section 被初始化,每一个线程就可以进入其中--只要它通过了
 EnterCriticalSection() 这一关。
 VOID EnterCriticalSection(
                            LPCRITICAL_SECTION lpCriticalSection );
 参数说明:
 lpCriticalSection  指向一个即将锁定的 CRITICAL_SECTION 变量。

 当线程准备好离开 critical section 时,它必须调用 LeaveCriticalSection():
 VOID LeaveCriticalSection (
                            LPCRITICAL_SECTION lpCriticalSection );
 参数说明:
 lpCriticalSection  指向一个你即将解除锁定的 CRITICAL_SECTION 变量。

 示例:
 void updateData()
  {
    EnterCriticalSection(&gCriticalSection);
    /*updata the  resource*/
    LeaveCriticalSection(&gCriticalSection);
  }   
  一个重要的警告:千万不要在一个 critical section 之中调用 Sleep() 或任何 Wait...()
  API函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值