线程间使用SRW轻量级锁共享变量

SRWLOCK  g_lock = {};        //轻量级锁
CONDITION_VARIABLE  g_val={};//轻量级锁的同步条件
INT  iGlobal = 0;            //读写的全局变量
DWORD  WINAPI  WriteThread(LPVOID lpParameter)
{//写线程
	while (1)
	{  
		Sleep(20);
		__try
		{
			AcquireSRWLockExclusive(&g_lock);//申请独占锁
			iGlobal++;
		}
		__finally
		{
			ReleaseSRWLockExclusive(&g_lock);//释放独占锁
			WakeAllConditionVariable(&g_val);//唤醒条件变量
		}
	}
	return 0;
}

DWORD WINAPI  ReadThread(LPVOID lpParameter)
{//读线程
	while (true)
	{   
		Sleep(30);
		__try
		{
			AcquireSRWLockShared(&g_lock);//申请共享锁
			BOOL rt = SleepConditionVariableSRW(&g_val, &g_lock, 20, 
			                     CONDITION_VARIABLE_LOCKMODE_SHARED);//等待条件变量
			if (rt)
			{
				char str[20] = {};
				itoa(iGlobal, str, 10);
				TRACE(str);
			}
 			else
 			{
				char str[20] = {};
				itoa(iGlobal, str, 10);
				TRACE(str);
			}
		}
		__finally
		{
			ReleaseSRWLockShared(&g_lock);//释放锁
		}
	}
	return 0;
}

void CtestThreadDlg::OnBnClickedButton15()
{
	InitializeSRWLock(&g_lock);
	InitializeConditionVariable(&g_val);
	
	DWORD  ThreadID =0;
	HANDLE  hWrite = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WriteThread, 
	                     NULL, CREATE_SUSPENDED, &ThreadID);
	HANDLE  hRead  = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadThread, 
	                     NULL, CREATE_SUSPENDED, &ThreadID);

	ResumeThread(hWrite);
	ResumeThread(hRead);
}

分享题目:线程间使用SRW轻量级锁共享变量
分享路径:http://www.csruizhi.cn/article/johedp.html

其他资讯

Copyright © 2007-2024 成都优众联杰科技有限公司 All Rights Reserved 蜀ICP备2024116266号
友情链接: 成都网站制作 高端网站设计 成都网站设计 泸州网站建设 企业网站设计 成都网站建设 网站设计 成都网站制作 营销型网站建设 成都网站建设公司 成都企业网站设计 高端网站设计推广 营销型网站建设 手机网站建设 网站设计制作报价 成都网站设计 营销网站建设 移动手机网站制作 企业手机网站建设 定制网站设计 成都营销网站建设 成都网站建设流程