【多线程】(四)关键段CS
来源:互联网 发布:淘宝刷单负债百万 编辑:程序博客网 时间:2024/05/17 05:08
参照 http://blog.csdn.net/morewindows/article/details/7442639
关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。
函数功能:初始化
函数原型:
voidInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
函数说明:定义关键段变量后必须先初始化。
函数功能:销毁
函数原型:
voidDeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
函数说明:用完之后记得销毁。
函数功能:进入关键区域
函数原型:
voidEnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
函数说明:系统保证各线程互斥的进入关键区域。
函数功能:离开关关键区域
函数原型:
voidLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
然后在经典多线程问题中设置二个关键区域。一个是主线程在递增子线程序号时,另一个是各子线程互斥的访问输出全局资源时。
// Thread003.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "process.h"#include "windows.h"long g_nNum ;const int THREAD_NUM = 10;CRITICAL_SECTION g_csThreadPara,g_csThreadCode;unsigned int __stdcall Fun(void *pPM){int nThreadNum = *(int *)pPM;LeaveCriticalSection(&g_csThreadPara);Sleep(50);EnterCriticalSection(&g_csThreadCode);g_nNum++;Sleep(0);printf("线程编号为%d 全局资源值为%d\n",nThreadNum,g_nNum);LeaveCriticalSection(&g_csThreadCode);return 0;}int _tmain(int argc, _TCHAR* argv[]){//关键段初始化InitializeCriticalSection(&g_csThreadCode);InitializeCriticalSection(&g_csThreadPara);g_nNum = 0;HANDLE handle[THREAD_NUM];int i = 0;while (i<THREAD_NUM){EnterCriticalSection(&g_csThreadPara);//进入子线程序号关键区域handle[i]=(HANDLE)_beginthreadex(NULL, 0, Fun ,&i ,0, NULL);i++;}WaitForMultipleObjects(THREAD_NUM ,handle,TRUE ,INFINITE);DeleteCriticalSection(&g_csThreadPara);DeleteCriticalSection(&g_csThreadCode);return 0;}
0 0
- 【多线程】(四)关键段CS
- 多线程之CS(关键段)
- Windows多线程(三) 关键段 CS
- 关键段CS总结
- 多线程之五 经典线程同步 关键段CS
- 多线程三 经典线程同步之关键段CS
- 多线程4:经典线程同步 关键段CS
- 多线程第三篇 经典线程同步之关键段CS
- 多线程三 经典线程同步之关键段CS
- 秒杀多线程-经典线程同步之关键段CS
- 多线程 -- 关键段
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 【转】秒杀多线程第五篇 经典线程同步 关键段CS
- 秒杀多线程第五篇 经典线程同步 关键段CS .
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 秒杀多线程第五篇 经典线程同步 关键段CS
- Eclipse中设置JVM内存
- Codeforces Round #275
- 错误:No resource found that matches the given name 'Theme.AppCompat.Light'解决方法
- C++学习之类的使用(排序算法)
- 墩泰的FT6206电容屏的调试
- 【多线程】(四)关键段CS
- ARCHIVELOG模式下用户管理的完全恢复—在没有数据文件备份的情况下恢复数据文件
- c语言中#include 路径查找问题
- cassandra源代码总结
- 二分图的相关概念
- IOS 获取当前Wifi的SSID
- C与C++的函数原型
- myeclipse查看java源代码的设置方法
- 又是一年校招