线程间使用SRW轻量级锁共享变量
SRWLOCKg_lock={};//轻量级锁CONDITION_VARIABLEg_val={};//轻量级锁的同步条件INTiGlobal=0;//读写的全局变量DWORDWINAPIWriteThread(LPVOIDlpParameter){//写线程while(1){Sleep(20);__try{AcquireSRWLockExclusive(&g_lock);//申请独占锁iGlobal++;}__finally{ReleaseSRWLockExclusive(&g_lock);//释放独占锁WakeAllConditionVariable(&g_val);//唤醒条件变量}}return0;}DWORDWINAPIReadThread(LPVOIDlpParameter){//读线程while(true){Sleep(30);__try{AcquireSRWLockShared(&g_lock);//申请共享锁BOOLrt=SleepConditionVariableSRW(&g_val,&g_lock,20,CONDITION_VARIABLE_LOCKMODE_SHARED);//等待条件变量if(rt){charstr[20]={};itoa(iGlobal,str,10);TRACE(str);}else{charstr[20]={};itoa(iGlobal,str,10);TRACE(str);}}__finally{ReleaseSRWLockShared(&g_lock);//释放锁}}return0;}voidCtestThreadDlg::OnBnClickedButton15(){InitializeSRWLock(&g_lock);InitializeConditionVariable(&g_val);DWORDThreadID=0;HANDLEhWrite=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WriteThread,NULL,CREATE_SUSPENDED,&ThreadID);HANDLEhRead=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReadThread,NULL,CREATE_SUSPENDED,&ThreadID);ResumeThread(hWrite);ResumeThread(hRead);}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。