Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9671
  • 博文数量: 1
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 24
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-07 09:06
文章分类

全部博文(1)

文章存档

2012年(1)

我的朋友
最近访客

分类: C/C++

2012-11-07 09:10:07


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <Windows.h>
  3. const int Tn = 3;
  4. HANDLE hMutex[Tn];
  5. void PutStar(LPVOID param)
  6. {
  7.     int w = int(param);
  8.     int nxt = (w+1)%Tn;
  9.     while(1)
  10.     {
  11.         WaitForSingleObject(hMutex[w],INFINITE);
  12.         std::cout<<w<<std::endl;
  13.         ReleaseMutex(hMutex[nxt]);
  14.     }
  15. }
  16.  
  17. int main()
  18. {
  19.     HANDLE t[Tn];
  20.     for (int i=0;i<Tn;i++)
  21.     {
  22.         hMutex[i] = CreateMutex(NULL,TRUE,NULL);
  23.         t[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PutStar,(LPVOID)i,0,NULL);
  24.     }
  25.     ReleaseMutex(hMutex[0]);
  26.     WaitForMultipleObjects(Tn,t,TRUE,INFINITE);
  27. }
本来是想循环输出0,1,2的,可是为什么只输出0呢?
思路是:
三个线程,三个互斥信号量;
线程1输出时先等待信号量1然后释放信号量2;
线程2输出时先等待信号量2然后释放信号量3;
线程3输出时先等待信号量3然后释放信号量1;
初始时每个信号量都是占用状态,首先在主线程中释放信号量1,这样三个线程就跑起来了。
阅读(1818) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~

genius522013-06-06 09:20:05

我用了event代替mutex,也可以实现,原理是一样的