赞
踩
题目:龟兔赛跑,跑道距离50米。乌龟(作为⼀个线程) 每秒3米,不睡觉 ;
兔子(作为⼀个线程)每秒5米,每跑15⽶睡2秒钟。请模拟比赛情况。
- #include<iostream>
- #include<unistd.h>
- #include<pthread.h>
- using namespace std;
- //龟兔赛跑:跑道长度50m,实现乌龟和兔子两个多进程程序,模拟比赛情况
-
- //乌龟线程(每秒3m,不休息)
- void* thread1(void* args){
- int len1; //乌龟跑的路程
- for(int i=1; ;i++){ //i表示秒数
- len1 = 3*i;
- cout<<"乌龟第"<<i<<"s,跑到了"<<len1<<"m处"<<endl;
- if(len1>=50) //不准确(没精准到更小单位、这个题无所谓)
- {
- cout<<"乌龟第"<<i<<"s跑到了终点"<<endl;
- break;
- }
- }
- return 0;
- }
-
- int main(){
- pthread_t id; //创造的线程id
- int len2=0; //兔子跑的路程
- //兔子线程作为主线程(每秒5m,每跑15m休息2秒)
- for(int i=1; ;i++){ //i表示秒数
- len2 += 5;
- cout<<"兔子第"<<i<<"s,跑到了"<<len2<<"m处"<<endl;
- if(len2%15==0){
- sleep(2);
- cout<<"兔子休息了两秒"<<endl;
- i+=2;
- }
- if(len2>=50){
- cout<<"兔子第"<<i<<"s跑到了终点"<<endl;
- break;
- }
- }
- int ret1 = pthread_create(&id, NULL, thread1, NULL);
- if(ret1) //ret的返回值不为0(ret!=0)
- {
- cout << "Create pthread error!" << endl;
- return 1;
- }
- pthread_join(id,NULL); //等待所有线程运行完毕
- //pthread_exit(NULL);
- }
解决方法:在CMakeLists.txt中添加下列语句:
- // 如果是C++(cpp文件):
- SET(CMAKE_CXX_FLAGS -pthread)
-
- // 如果是C语言(.c文件):
- SET(CMAKE_C_FLAGS -pthread)
-
实际操作,举例如下图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。