博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程中的临界区
阅读量:6340 次
发布时间:2019-06-22

本文共 1267 字,大约阅读时间需要 4 分钟。

临界区又叫关键代码段.在多线程共享变量时,用来安全读写共享变量.代码如下:

CRITICAL_SECTION   g_csSync = {};//临界区INT   g_iData = 0;DWORD  WINAPI  WriteThreadProc(LPVOID lpParameter){//写线程	while (1)	{		Sleep(30);		__try		{			EnterCriticalSection(&g_csSync);			g_iData++;		}		__finally		{			LeaveCriticalSection(&g_csSync);		}	}	return 0;}DWORD WINAPI  ReadThreadProc(LPVOID lpParameter){//读线程	while (true)	{		Sleep(30);		__try		{			EnterCriticalSection(&g_csSync);//进入临界区			char str[20] = {};			itoa(g_iData, str, 10);			TRACE(str);		}		__finally		{			LeaveCriticalSection(&g_csSync);//离开临界区		}	}	return 0;}void CtestThreadDlg::OnBnClickedButton16(){	InitializeCriticalSectionAndSpinCount(&g_csSync, 0x4000);//初始化临界区	DWORD  ThreadID = 0;	HANDLE  hThread[2] = {};	hThread[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WriteThreadProc, 	                     NULL, CREATE_SUSPENDED, &ThreadID);	hThread[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadThreadProc, 	                     NULL, CREATE_SUSPENDED, &ThreadID);	ResumeThread(hThread[0]);	ResumeThread(hThread[1]);	WaitForMultipleObjects(2, hThread, TRUE, INFINITE);	CloseHandle(hThread[0]);	CloseHandle(hThread[1]);	DeleteCriticalSection(&g_csSync);//删除临界区}
本文转自Chinayu201451CTO博客,原文链接:http://blog.51cto.com/9233403/2048966 ,如需转载请自行联系原作者
你可能感兴趣的文章
磁盘管理
查看>>
我的友情链接
查看>>
AWR报告
查看>>
MySQL innobackupex全备
查看>>
autofs自动挂载
查看>>
NumberUtils的简单学习
查看>>
centos7和win7双系统安装
查看>>
Linux用户权限(随笔)
查看>>
生产服务器环境最小化安装后 Centos 6.5优化配置备忘
查看>>
Manual close is not allowed over a Spring managed SqlSession
查看>>
bash编程及多命令
查看>>
php curl实现get和post请求
查看>>
【Linux命令详解】12、文本内容显示—[ cat、tac、more、less、tail、head]
查看>>
linux端口聚合
查看>>
3G上网卡 网络适配器 未知设备 解决方案
查看>>
C语言实现排序
查看>>
MySQL数据库备份和恢复
查看>>
Linux Web服务器网站故障分析常用的命令
查看>>
Hyper-V故障转移群集搭建(2)
查看>>
我的友情链接
查看>>