首页 > 代码库 > 警察与小偷

警察与小偷

题目描述:警察和小偷被手铐绑在一起,需要共同逃亡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 run20             if(my_thief+rand1<my_police+3)   //run21                 my_thief+=rand1;22             else23                 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 run38             if(my_police+rand2<my_thief+3)   //run39                 my_police+=rand2;40             else41                 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             else59                 printf("the first come is the thief\n");60             break;61         }62     }63 64     return 0;65 }

 

警察与小偷