警察与小偷

题目描述:警察和小偷被手铐绑在一起,需要共同逃亡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 }
时间: 2024-08-20 06:38:29

警察与小偷的相关文章

警察与小偷的实现之一客户端与服务端通信

来源于ISCC 2012 破解关第四题 目的是通过逆向police,实现一个thief,能够与police进行通信 实际上就是一个RSA加密通信的例子,我们通过自己编写客户端和服务端来实现上面的thief和police的功能.. 要通信,这们这次先通过python写出可以进行网络连接的客户端与服务端.. 服务端代码 #!/usr/bin/env python import SocketServer from time import ctime HOST = '127.0.0.1' PORT =

警察与小偷的实现之中的一个client与服务端通信

来源于ISCC 2012 破解关第四题 目的是通过逆向police.实现一个thief,可以与police进行通信 实际上就是一个RSA加密通信的样例,我们通过自己编写client和服务端来实现上面的thief和police的功能.. 要通信.这们这次先通过python写出能够进行网络连接的client与服务端.. 服务端代码 #!/usr/bin/env python import SocketServer from time import ctime HOST = '127.0.0.1' P

警察与小偷之间的故事

啊山地自行车 http://www.jiaoyou8.com/friends_diary/zswzsw1/0_0_0/view_0012236021_yes_0_0.html http://www.jiaoyou8.com/friends_diary/zswzsw1/0_0_0/view_0012236715_yes_0_0.html http://www.jiaoyou8.com/friends_diary/zswzsw1/0_0_0/view_0012237201_yes_0_0.html

UVALive 7297 bfs

题意 一个小偷偷到了项链 他想知道自己是否可以逃出去 地图中有一个小偷 一个警察 警察有一条狗 一开始 小偷和警察的移动速度都是1 当警察走到小偷经过过的地方时 警察会有一条狗嗅到小偷的气味并且以2的速度去追 由于问题问的是 小偷是否必定有方法逃出 所以我们可以看作 有无限个警察从一个点出发去抓小偷 每经过一个点 这个点上就会有一个警察站着 所以会有一个limit来记录警察到达这个点的最短的时间 我们可以想到 小偷到这个点的时间和警察到达这个点的时间的差 就是小偷到这个点之后可以行动的时间(如果

RxJava入门第八、九问(二)

开始第8个问题之前,先说一个词:变换,什么意思呢? RxJava官方解释:所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列. 如果你通过上面的定义没有很好地理解什么是变换.以及为什么要使用变换,那么请看下面这个故事:庖丁宰鸡(包学包会) 养鸡户(被观察者)发送了一个数据: - 一只活蹦乱跳的鸡. 而这个养鸡户被很多观察者订阅了,这些观察者分别是: - 烤鸡翅的夜宵店老板 - 做宫保鸡丁的厨子 - 做泡椒凤爪的厂家 他们虽然都能收到"这只活蹦乱跳的鸡"这

Java的设计模式

Java设计模式 介绍 GOF是Gang of four(四人帮)的简称,是由四位java业界的专家编写的针对特定场景下问题的专家级解决方案.大概包含23中设计模式,设计模式本身与技术没有太大关系,主要是设计思想的运用,比较著名的像单例模式.工厂模式等.本文不打算给出所有设计模式的说明,主要给出实际应用较普遍的几种且比较经典的设计 高内聚和低耦合 内聚 :事物内部的联系程度,高内聚. 耦合 :事物之间的联系程度,低耦合. 1.单例模式 懒汉模式 1.singleton 单例 : 类有且只有一个实