C++使用CriticalSection实现线程同步实例

本文介绍了一种使用CriticalSection进行线程同步的方法。通过两个线程同时递增两个全局变量并利用CriticalSection保护共享资源,确保了线程安全。示例代码展示了如何初始化、进入、离开并删除CriticalSection。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例讲述了C++使用CriticalSection实现线程同步的方法,使用了四个函数:EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection此时,打印出来的数字就相等了。

具体代码如下:

#include "stdafx.h"  
#include <Windows.h>     
DWORD g_cnt1;  
DWORD g_cnt2;  
BOOL g_bContinue = TRUE;  
CRITICAL_SECTION cs;     
DWORD WINAPI ThreadProc(__in LPVOID lpParameter)  
{    
	::EnterCriticalSection(&cs);    
	while(g_bContinue)    
	{      
		g_cnt1++;      
		g_cnt2++;    
	}    
	::LeaveCriticalSection(&cs);    
	return 0;  
}     
int _tmain(int argc, _TCHAR* argv[])  
{    
	HANDLE hThread[2];    
	g_cnt1 = g_cnt2 = 0;    
	::InitializeCriticalSection(&cs);       
	hThread[0] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);   
	hThread[1] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);       
	Sleep(1000);    
	g_bContinue = FALSE;    
	::WaitForMultipleObjects(2, hThread, TRUE, INFINITE);    
	printf("g_cnt1=%d\n",g_cnt1);    printf("g_cnt2=%d\n",g_cnt2);       
	::DeleteCriticalSection(&cs);       
	::CloseHandle(hThread[0]);    
	::CloseHandle(hThread[1]);    
	return 0;  
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值