windows多线程访问变量处理
2011-10-12 14:34
267 查看
多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数
临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和LeaveCriticalSection()函数去标识和释放一个临界区。所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection()的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。
DOWRD m_haha; //成员变量
CRITICAL_SECTION
m_happy;
InitialzeCriticalSection(&m_happy); //在构造函数中执行
DeleteCritialSection(&m_happy); //在析构函数中执行
//在某个线程中操作该成员变量时,要如下处理:
EnterCriticalSection(&m_happy);
DWORD haha= m_haha++;
LeaveCriticalSection(&m_happy);
每个线程中访问临界资源的那段代码称为临界区(Critical Section)。所以上面的 DWORD happy =
m_happy++; 就是临界区啦
其实就是创建临界区对象,使用EnterCriticalSection()进入这个临界区获取这个对象,使用完要LeaveCriticalSection()退出该临界区,这样别的线程才能用。
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和LeaveCriticalSection()函数去标识和释放一个临界区。所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection()的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。
DOWRD m_haha; //成员变量
CRITICAL_SECTION
m_happy;
InitialzeCriticalSection(&m_happy); //在构造函数中执行
DeleteCritialSection(&m_happy); //在析构函数中执行
//在某个线程中操作该成员变量时,要如下处理:
EnterCriticalSection(&m_happy);
DWORD haha= m_haha++;
LeaveCriticalSection(&m_happy);
每个线程中访问临界资源的那段代码称为临界区(Critical Section)。所以上面的 DWORD happy =
m_happy++; 就是临界区啦
其实就是创建临界区对象,使用EnterCriticalSection()进入这个临界区获取这个对象,使用完要LeaveCriticalSection()退出该临界区,这样别的线程才能用。
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
EnterCriticalSection(&m_happy);
DOWRD happy = m_happy++;
LeaveCritialSection(&m_happy);
相关文章推荐
- windows下多线程通信方法(多线程访问同一变量)
- Windows 窗体控件中的多线程处理之:如何对 Windows 窗体控件进行线程安全调用
- 利用局部变量解决多线程访问问题
- Java多线程编程核心技术---对象及变量的并发访问(二)
- delphi多线程访问公共变量
- C#多线程访问定义的全局变量(lock线程锁)
- 多线程访问成员变量与局部变量
- java多线程之-----对象及变量的并发访问1(synchronized同步方法)
- Java多线程访问成员变量与局部变量
- 学习JAVA多线程编程 --- 《JAVA多线程编程核心技术》第2章 对象及变量的并发访问 笔记
- Java多线程 - 对象及变量的并发访问
- 【Java多线程编程核心技术】2.对象及变量的并发访问(下)-笔记总结
- Java多线程编程核心技术---对象及变量的并发访问(二)
- 多线程:利用互斥锁来处理全局变量的互斥问题
- (第四版中文版)[十一]Windows消息处理和多线程
- delphi多线程访问公共变量
- java多线程访问同一变量及简单同步问题(待后续整理)
- Java中,对多线程访问同一变量(并发访问)的认识
- Java 多线程(四) 多线程访问成员变量与局部变量