两个线程交替执行

两个线程交替执行

2023年6月22日发(作者:)

两个线程交替执⾏本⽂实现两个线程的交替执⾏,⼀个线程输出奇数,另⼀个输出偶数,⼀定要是交替执⾏。这⾥使⽤的是事件event和临界区criticalsection来实现,其中event⽤于主线程和⼦线程之间的同步,⽽criticalsection⽤于⼦线程之间的互斥。代码如下,其中代码中间有详细的注释。#include#include#includeusing namespace std;int g_t=0;HANDLE g_hThreadEvent1;CRITICAL_SECTION g_csThreadCode1;HANDLE event0;HANDLE event1;bool flag0 = false;bool flag1 = true;unsigned int __stdcall Fun2(void* pPM){ int nThreadID=*(int *)pPM; SetEvent(g_hThreadEvent1); Sleep(50);

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信