使用CMutex类实行线程同步

#include <windows.h>        //包含头文件
#include <stdio.h>
#include  <afxmt.h>
DWORD WINAPI myfun1(       //声明线程函数
  LPVOID lpParameter  
);
DWORD WINAPI myfun2(
  LPVOID lpParameter  
);
CMutex hmutex(NULL,FALSE,NULL);     //定义全局互斥对象
int a=0;           //定义全局变量a
main()

  HANDLE h1,h2;         //定义线程句柄
 h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);  //创建线程1
printf("使用CMutex 类实现线程同步/r/n");
 printf("线程1开始运行!/r/n");
 h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);  //创建线程2
 printf("线程2开始运行!/r/n");
 ::CloseHandle(h1);        //关闭线程句柄对象
 ::CloseHandle(h2);
::Sleep(10000);         //程序睡眠10秒
return 0;
  }
DWORD WINAPI myfun1(LPVOID lpParameter)    //线程函数1
{
   while(1)
   {
    hmutex.Lock(INFINITE);      //锁定互斥对象
    if(a<10000)
{
 a+=1;          //变量自加
 ::Sleep(1000);         //线程睡眠1秒
   printf("线程1:%d/r/n",a);
  hmutex.Unlock();        //释放互斥对象
   }
else
{
hmutex.Unlock();        //释放互斥对象
    break;          //跳出循环
   }
}
    return 0;          //线程
}
DWORD WINAPI myfun2(LPVOID lpParameter)    //线程函数2
{
  while(1)
   {
   hmutex.Lock(INFINITE);      //锁定互斥对象 
   if(a<10000)
{
 a+=1;
 ::Sleep(1000);
   printf("线程2:%d/r/n",a);       //输出变量
   hmutex.Unlock();        //释放互斥对象
  }
else

 hmutex.Unlock();        //释放互斥对象
    break;          //跳出循环
   }

}
    return 0;          //线程正常退出
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值