windows api学习笔记-用临界区对象使线程同步
2010-02-09 12:44
183 查看
#include <windows.h> #include <iostream> #include <process.h> using namespace std; int g_nCount1 = 0; int g_nCount2 = 0; CRITICAL_SECTION g_cs;//临界区 BOOL g_bContinue = TRUE;//线程结束标志 UINT WINAPI MyThread(LPVOID) { while(g_bContinue) { ::EnterCriticalSection(&g_cs);//如果另一个线程在临界区的话,当前线程会一直等待下去 g_nCount1++; g_nCount2++; ::LeaveCriticalSection(&g_cs);//把临界区还给Windows } return 0; } int main() { UINT uThreadId; HANDLE h[2]; ::InitializeCriticalSection(&g_cs);//临界区初始化 h[0] = (HANDLE)::_beginthreadex( NULL,//线程安全性 0,//线程堆栈大小 MyThread,//线程函数的名称 NULL,//线程函数的参数 0,//立即启动 &uThreadId//内核给新生成的线程分配的线程ID ); h[1] = (HANDLE)::_beginthreadex( NULL,//线程安全性 0,//线程堆栈大小 MyThread,//线程函数的名称 NULL,//线程函数的参数 0,//立即启动 &uThreadId//内核给新生成的线程分配的线程ID ); ::Sleep(600); g_bContinue = FALSE; ::WaitForMultipleObjects( 2,//要等待内核对象的数量 h,//句柄数组 TRUE,//是否要等待所有内核对象都成为受信状态 INFINITE//无限期等待下去 ); ::CloseHandle(h[0]); ::CloseHandle(h[1]); ::DeleteCriticalSection(&g_cs);//删除林界区 cout<<g_nCount1<<" "<<g_nCount2<<endl; char a; cin >> a; }
相关文章推荐
- JVM原理学习笔记 -- (对象线程同步)
- 多线程开发学习笔记之线程同步——临界区
- “黑马程序员”视频学习笔记之面向对象基础及调试问题
- 12. JAVA IO Part 4 (对象的序列化) ----- 学习笔记
- Object-C 学习笔记(三十)--- 归档(3)---对象归档
- STL学习笔记8 -- 函数对象
- 面向对象学习笔记(1)
- 流畅的python学习笔记:第九章:符合python风格的对象
- C++对象模型学习笔记
- 面向对象与生活学习笔记--盛大创新学院(高翔)
- C++学习笔记(六) 面向对象
- 《Effective Java 第二版》学习笔记,第21条:用函数对象表示策略
- Silverlight学习笔记之使用TranslateTransform控制对象位置
- 深度探索C++对象模型学习笔记——Data语意学
- 面向对象设计模式之Composite组合模式学习笔记
- jQuery学习笔记 获取jQuery对象
- java学习个人笔记---Java内存管理之java对象内存中的状态
- 黑马程序员---java学习笔记之其他对象
- php学习笔记(三十一)自定义ajax对象,简化ajax应用