首页 » 技术分享 » 警察与小偷

警察与小偷

 

题目描述:警察和小偷被手铐绑在一起,需要共同逃亡100m,手铐长度3m。

可以参考 生产者消费者模型

线程问题,理解线程,多线程

运行环境为pthreads-w32 release 2.8.0+codeblocks,pthread在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。

主要难点在编译运行环境的搭建,程序很简单,大家一看应该就会明白,也没有多少行代码

pthread是Linux下对进程管理的操作,虽然Windows操作系统也有其移植版pthreads-win32,但要运行pthread程序还要对编译器进行一下必要的配置

1、下载pthreads-win32 即pthreads-w32-2-8-0-release

此文件我上传到了csdn上,大家可以自行下载:http://download.csdn.net/detail/karma_w/8154507

2、将解压后的pre-bjuild.2(预编译文件夹)下的lib和inlcude文件夹里面的内容复制到codebloks的lib和include文件夹下

3、将解压后的pre-bjuild.2下的lib中pthreadVC2.dll复制到你所建立的工程文件中作为动态链接库

4、对编译环境进行配置:setting->compiler->Linker settings->add添加库文件,即lib下的pthreadVC2.a、pthreadVCE2.a、pthreadVSE2.a库文件,配置完成,编译

代码如下:使用了进程互斥锁mutex,创建了两个进程void *thief(void *args)和void *police(void *args),利用随机数种子产生1-6的随机数,即警察或小偷的一次最大前进距离为6米,假设其中一人落后3米,即可前进6米

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <pthread.h>
 4 #include <time.h>
 5 #include <windows.h>
 6 
 7 int my_thief=0;
 8 int my_police=0;
 9 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
10 
11 /**thief go first and police follow**/
12 void *thief(void *args)
13 {
14     int rand1;
15     while(1){
16         pthread_mutex_lock(&mutex);
17         srand((unsigned)time(NULL));/**随机种子**/
18         rand1=rand()%6+1;
19         if(my_thief-my_police<3){             //thief can run
20             if(my_thief+rand1<my_police+3)   //run
21                 my_thief+=rand1;
22             else
23                 my_thief=my_police+3;
24         }
25         printf("thief:%d\n",my_thief);
26         pthread_mutex_unlock(&mutex);
27         Sleep(500);
28     }
29 }
30 void *police(void *args)
31 {
32     int rand2;
33     while(1){
34         pthread_mutex_lock(&mutex);
35         srand((unsigned)time(NULL));/**随机种子**/
36         rand2=rand()%6+1;
37         if(my_police-my_thief<3){             //thief can run
38             if(my_police+rand2<my_thief+3)   //run
39                 my_police+=rand2;
40             else
41                 my_police=my_thief+3;
42         }
43         printf("police:%d\n",my_police);
44         pthread_mutex_unlock(&mutex);
45         Sleep(500);
46     }
47 }
48 int main()
49 {
50     pthread_t t1,t2;
51     pthread_create(&t1,NULL,thief,NULL);
52     pthread_create(&t2,NULL,police,NULL);
53 
54     while(1){
55         if(my_police>=100 || my_thief>=100){
56             if(my_police>my_thief)
57                 printf("the first come is the police\n");
58             else
59                 printf("the first come is the thief\n");
60             break;
61         }
62     }
63 
64     return 0;
65 }

转载自原文链接, 如需删除请联系管理员。

原文链接:警察与小偷,转载请注明来源!

0