请输入您要查询的百科知识:

 

词条 EnterCriticalSection
释义

多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数。

函数EnterCriticalSection和LeaveCriticalSection声明如下:

WINBASEAPI

VOID

WINAPI

EnterCriticalSection(

__inout LPCRITICAL_SECTION lpCriticalSection

);

WINBASEAPI

VOID

WINAPI

LeaveCriticalSection(

__inout LPCRITICAL_SECTION lpCriticalSection

);

lpCriticalSection是创建临界区对象。

调用函数的例子如下:

#001 CCaiWinMsg::CCaiWinMsg(void)

#002 {

#003 m_hBtn = NULL;

#004 m_nCount = 0;

#005

#006 m_pThreadA = NULL;

#007 m_pThreadB = NULL;

#008

#009 //

#010 InitializeCriticalSection(&m_csCount);

#011

#012 }

#013

#014 CCaiWinMsg::~CCaiWinMsg(void)

#015 {

#016 DeleteCriticalSection(&m_csCount);

#017 }

#018

第10行是创建临界区对象。

第16行是删除临界区对象。

#001 //

#002 //窗口的消息处理类。

#003 //蔡军生 2007/08/13

#004 //

#005 class CCaiWinMsg :

#006 public CCaiWin

#007 {

#008 public:

#009 CCaiWinMsg(void);

#010 virtual ~CCaiWinMsg(void);

#011

#012 //线程操作函数。

#013 int AddCount(void)

#014 {

#015 //

#016 EnterCriticalSection(&m_csCount);

#017 int nRet = m_nCount++;

#018 LeaveCriticalSection(&m_csCount);

#019

#020 return nRet;

#021 }

在函数AddCount里调用EnterCriticalSection

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/7 12:05:08