windows C/C++ 线程安全(一)临界区

该博客承接上一篇关于线程创建的内容,还提及了临界区的使用,可参考链接https://blog.youkuaiyun.com/uVarAndMethod/article/details/90358925获取线程创建部分信息。

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

承接上面一篇讲了线程创建部分:https://blog.youkuaiyun.com/uVarAndMethod/article/details/90358925

临界区的使用

	1、创建CRITICAL_SECTION:									
	CRITICAL_SECTION cs;					
						
	2、在使用前进行初始化					
	InitializeCriticalSection(&cs);					
						
	3、在函数中使用:					
	DWORD WINAPI 线程A(PVOID pvParam) 					
	{					
	      EnterCriticalSection(&cs);									
	      //对全局遍历X的操作								
	      LeaveCriticalSection(&cs);					
	   return(0);					
	}					
						
	DWORD WINAPI 线程B(PVOID pvParam) 					
	{					
	      EnterCriticalSection(&g_cs);					
	      //对全局遍历X的操作							
	      LeaveCriticalSection(&g_cs);					
	   return(0);					
	}					
						
	4、删除CRITICAL_SECTION									
	VOID DeleteCriticalSection(PCRITICAL_SECTION pcs);									
	当线程不再试图访问共享资源时					

    	typedef struct _RTL_CRITICAL_SECTION {		
	    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;		
	    LONG LockCount;		
	    LONG RecursionCount;		
	    HANDLE OwningThread;       		
	    HANDLE LockSemaphore;		
	    DWORD SpinCount;		
	} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;		
			
	LockCount:		
	它被初始化为数值 -1		
	此数值等于或大于 0 时,表示此临界区被占用		
			
	等待获得临界区的线程数:LockCount - (RecursionCount -1)		
			
	RecursionCount:		
	此字段包含所有者线程已经获得该临界区的次数		
			
	OwningThread:		
	此字段包含当前占用此临界区的线程的线程标识符		
	此线程 ID 与GetCurrentThreadId 所返回的 ID 相同		

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值