2023年6月22日发(作者:)
两个线程交替执⾏本⽂实现两个线程的交替执⾏,⼀个线程输出奇数,另⼀个输出偶数,⼀定要是交替执⾏。这⾥使⽤的是事件event和临界区criticalsection来实现,其中event⽤于主线程和⼦线程之间的同步,⽽criticalsection⽤于⼦线程之间的互斥。代码如下,其中代码中间有详细的注释。#include
for(int i=0;i<20;++i) {
if(nThreadID==0) { //Sleep(50); SetEvent(event1);//激活另外⼀个线程
WaitForSingleObject(event0,INFINITE); while(!flag0) Sleep(1); } else { //Sleep(50); SetEvent(event0); WaitForSingleObject(event1,INFINITE); while(!flag1) Sleep(1); } //临界区保证⼦线程对全局变量的互斥访问 EnterCriticalSection(&g_csThreadCode1); if(nThreadID==0) { //阻塞当前线程
//ResetEvent(event0);//不能加ResetEvent,否则会在某⼀时刻线程0调⽤ResetEvent⽽线程1调⽤SetEvent,会出错 flag0 = false; flag1 = true; } else { //ResetEvent(event1); flag0 = true; flag1 = false; } cout<<"ID:"< void alternateExe2(){ const int num = 2; HANDLE handle[num]; g_hThreadEvent1 = CreateEvent(NULL,false,false,NULL);//⾃动置位 event0 = CreateEvent(NULL,false,false,NULL); event1 = CreateEvent(NULL,false,false,NULL); InitializeCriticalSection(&g_csThreadCode1); int i=0; while(i
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687426894a9223.html
评论列表(0条)