这个学期还没有讲操作系统,看多线程还真的很累,才看到Semaphore,猛然有一些思路,记下来,方便日后回来消化.
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
上面的代码想达到如下测试目的:即开辟三个线程。但是我想加上这个目的,假如这里我有个很破服务器,服务器上有个网页要给大家参考参考,但是服务器太破了,每次都只能支持两个用户同时访问,多了就崩了!所以我要加一个Semaphore,这样可以控制线程对该网页的访问。注意我在create一个Semaphore时 其中hSemaphore=CreateSemaphore(NULL,2,2,NULL); 我设的第三个lMaximumCount 为2,即表示最多两个线程访问该资源.
Semaphore可以参考http://shmilylff.bokee.com/2007907.html ,写得很浅显。
上面这段代码够短的了,可惜本人实在天赋不够高,每每打印出来的结果偏偏少了一个thread 2 process,如下图,查了我半个多小时。
开始以为是Semaphore的问题(我小白),便把所有的Semaphore相关代码都注释掉了,但是还是上述结果,后来突然想起,如果主线程在副线程结束之前就已经结束了那不是看不到线程2执行结果啦? 呵呵,我在main函数再加上了一条
WaitForMultipleObjects(3,hThreads,TRUE,INFINITE);
这句话是说等待所有其他线程都结束了,main函数才继续执行下去,否则等待。问题解决!