CRITICAL_SECTION的使用例子
2014-10-13 08:10
253 查看
下面以对stl::list容器的操作作为例子,list如果不处理好,容易出错。所以更能看出效果。
下面一个线程是实现读取和删除的同步。
下面一个线程是实现读取和删除的同步。
#include "stdafx.h" #include <WinSock2.h>//内包含CRITICAL_SECTION #include <list> #include <process.h> using namespace std; CRITICAL_SECTION g_cs; list<int> int_list; unsigned int __stdcall read_thread(void *p) { for(;;) { EnterCriticalSection(&g_cs); list<int>::iterator iter; for(iter = int_list.begin(); iter != int_list.end() ;iter++) { printf("%d\n",*iter); } LeaveCriticalSection(&g_cs); if(int_list.size() == 0) break; printf("\\\\\\\\\\\\\\\n"); Sleep(500);//控制显示间隔时间,去掉可以更能看出效果 } return 1; } unsigned int __stdcall delete_thread(void *p) { for(;;) { EnterCriticalSection(&g_cs); list<int>::iterator iter; if(int_list.size() == 0){printf("清空完毕!\n");break;} for(iter = int_list.begin(); iter != int_list.end() ;iter++) { int_list.erase(iter); break; } LeaveCriticalSection(&g_cs); Sleep(1000); } return 1; } int _tmain(int argc, _TCHAR* argv[]) { InitializeCriticalSection(&g_cs); for(int i = 0; i != 10 ; ++i) int_list.push_back(i); _beginthreadex(0,0,read_thread,0,0,0); _beginthreadex(0,0,delete_thread,0,0,0); scanf("%s"); DeleteCriticalSection(&g_cs); return 0; }
相关文章推荐
- 使用CCriticalSection 类进行线程同步
- Critical Section Objects(临界区域)的使用
- 临界段CCriticalSection的使用
- 关于多线程与CRITICAL_SECTION的使用
- 在使用Poco库调试时出现异常,异常位置:EnterCriticalSection(&_cs);
- [原创]自定义Config例子,使用IConfigurationSectionHandler 接口
- C++多线程之使用Mutex和Critical_Section
- 线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的使用方法
- 使用CriticalSection(CRITICAL_SECTION*) 去创建临界区对象 应该在线程创建前创建
- C++多线程之使用Mutex和Critical_Section
- 对使用CRITICAL_SECTION实现读写锁的质疑
- GNU C attribute section的一个使用例子
- 关于使用EnterCriticalSection思考
- 用单例模式解决临界区(CRITICAL_SECTION)的使用问题
- 互锁函数 (CRITICAL_SECTION)的使用
- 使用临界区 CRITICAL_SECTION 实现互斥
- 使用临界区CRITICAL_SECTION结构对象保护多线程互斥地访问共享资源
- CCriticalSection的使用与探究
- Windows下临界区的使用CRITICAL_SECTION
- MFC线程同步—— CCriticalSection类使用