博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关键代码段实现线程同步
阅读量:6345 次
发布时间:2019-06-22

本文共 1670 字,大约阅读时间需要 5 分钟。

关键代码段在很多硬件系统(比如Linux,ucOS等等)也存在,只是系统开发用于来保护现场,根据上Demo,更改如下:

#include<windows.h>
#include<iostream.h>
DWORD WINAPI FuncThreadone(LPVOID lpParameter);
DWORD WINAPI FuncThreadTwo(LPVOID lpParameter);

int index=0;

int tickets=100;
HANDLE hMutex;
HANDLE m_hEvent;
CRITICAL_SECTION g_cs;

void main(){

 HANDLE hThread1;
 HANDLE hThread2;
 hMutex=CreateMutex(NULL,0,NULL);
 m_hEvent=CreateEvent(NULL,FALSE,TRUE,NULL);

 //SetEvent(m_hEvent);

 hThread1=CreateThread(NULL,0,FuncThreadone,NULL,0,NULL);

 hThread2=CreateThread(NULL,0,FuncThreadTwo,NULL,0,NULL);
 CloseHandle(hThread1);
 CloseHandle(hThread2);
 cout<<"main thread is running"<<endl;
 //Sleep(10);
 InitializeCriticalSection(&g_cs);

 Sleep(4000);

 DeleteCriticalSection(&g_cs);
 //CloseHandle(m_hEvent);
}

DWORD WINAPI FuncThreadone(LPVOID lpParameter){

 //cout<<"thread one is running !"<<endl;

 while(1){
  //WaitForSingleObject(hMutex,INFINITE);
  //WaitForSingleObject(m_hEvent,INFINITE);
  //ResetEvent(m_hEvent);
  EnterCriticalSection(&g_cs);
  if(tickets>0){
   Sleep(1);
   cout<<"thread1 sell ticket : "<<tickets--<<endl;
   //SetEvent(m_hEvent);
   LeaveCriticalSection(&g_cs);
  }else{
   //SetEvent(m_hEvent);
   LeaveCriticalSection(&g_cs);
   break;
  }
  //ReleaseMutex(hMutex);
 }
 return 0;

}

DWORD WINAPI FuncThreadTwo(LPVOID lpParameter){

 //cout<<"thread two is running !"<<endl;

 while(1){
  //WaitForSingleObject(hMutex,INFINITE);
  //WaitForSingleObject(m_hEvent,INFINITE);
  //ResetEvent(m_hEvent);
  EnterCriticalSection(&g_cs);
  if(tickets>0){
   Sleep(1);
   cout<<"thread2 sell ticket : "<<tickets--<<endl;
   LeaveCriticalSection(&g_cs);
   //SetEvent(m_hEvent);
  }else{
   //SetEvent(m_hEvent);
   LeaveCriticalSection(&g_cs);
   break;
  }
  //ReleaseMutex(hMutex);
 }
 return 0;

}

 

转载地址:http://clcla.baihongyu.com/

你可能感兴趣的文章
IE FF(火狐) line-height兼容详解
查看>>
谷歌Pixel 3吸引三星用户, 但未动摇iPhone地位
查看>>
python获取当前工作目录
查看>>
VUE中使用vuex,cookie,全局变量(少代码示例)
查看>>
grep -w 的解析_学习笔记
查看>>
量化交易之启航
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
IO Foundation 3 -文件解析器 FileParser
查看>>
linux学习经验之谈
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>
JS中将变量转为字符串
查看>>
servlet笔记
查看>>
JVM(五)垃圾回收器的前世今生
查看>>
CentOS 7 下安装 Nginx
查看>>
Spring Boot 自动配置之@EnableAutoConfiguration
查看>>
为了学习go我从0开始用beego写了一个简单个人博客(2)登陆管理
查看>>
职业女性:学会减压救自己!
查看>>