2.22作业

作业要求:

程序代码:

#include<myhead.h>int num = 520;
pthread_mutex_t mutex;void* task1(void* arg)
{pthread_mutex_lock(&mutex);num = 1314;sleep(3);printf("task1:num = %d\n", num);pthread_mutex_unlock(&mutex);
}void* task2(void* arg)
{pthread_mutex_lock(&mutex);num++;sleep(1);printf("task2:num = %d\n", num);pthread_mutex_unlock(&mutex);
}int main(int argc, const char *argv[])
{pthread_mutex_init(&mutex, NULL);pthread_t thread1, thread2;if (pthread_create(&thread1, NULL, task1, NULL) != 0 || \pthread_create(&thread2, NULL, task2, NULL) != 0){perror("thread create error");return -1;}printf("thread1:%#lx, thread2:%#lx\n", thread1, thread2);pthread_join(thread1, NULL);pthread_join(thread2, NULL);pthread_mutex_destroy(&mutex);return 0;
}

运行结果:

程序代码:

#include<myhead.h>//创建无名信号量
sem_t sem1,sem2,sem3;//定义线程1
void *task1(void *arg)
{int num=5;while(num--){sem_wait(&sem1);sleep(1);printf("A");fflush(stdout);sem_post(&sem2);}pthread_exit(NULL);
}
//定义线程2
void *task2(void *arg)
{int num=5;while(num--){sem_wait(&sem2);sleep(1);printf("B");fflush(stdout);sem_post(&sem3);}pthread_exit(NULL);}//定义线程3
void *task3(void *arg)
{int num=5;while(num--){sem_wait(&sem3);sleep(1);printf("C");fflush(stdout);sem_post(&sem1);}pthread_exit(NULL);}int main(int argc, const char *argv[])
{sem_init(&sem1,0,1);sem_init(&sem2,0,0);sem_init(&sem3,0,0);pthread_t tid1 ,tid2 ,tid3;if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("tid1 create error\n");return 0;}        if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error\n");return 0;}if(pthread_create(&tid3,NULL,task3,NULL)!=0){printf("tid3 create error\n");return 0;}printf("tid1:%#lx,tid2:%#lx,tid3:%#lx\n",tid1,tid2,tid3);pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_join(tid3,NULL);sem_destroy(&sem1);sem_destroy(&sem2);sem_destroy(&sem3);puts("");return 0;
}

运行结果:

程序代码:

#include<myhead.h>
pthread_cond_t cond;
pthread_mutex_t mutex;void* task1(void* arg)
{int num = 5;while (num--){sleep(1);printf("%#lx:生产一辆车\n", pthread_self());}pthread_cond_broadcast(&cond);pthread_exit(NULL);
}void* task2(void* arg)
{pthread_mutex_lock(&mutex);pthread_cond_wait(&cond, &mutex);printf("%#lx:获得一辆车\n", pthread_self());pthread_mutex_unlock(&mutex);
}int main(int argc, char const *argv[])
{pthread_mutex_init(&mutex, NULL);pthread_t thread1, thread2, thread3, thread4, thread5, thread6;if (pthread_create(&thread1, NULL, task1, NULL) != 0 || \pthread_create(&thread2, NULL, task2, NULL) != 0 || \pthread_create(&thread3, NULL, task2, NULL) != 0 || \pthread_create(&thread4, NULL, task2, NULL) != 0 || \pthread_create(&thread5, NULL, task2, NULL) != 0 || \pthread_create(&thread6, NULL, task2, NULL) != 0){perror("thread create error");return -1;}printf("thread1:%#lx\nthread2:%#lx\nthread3:%#lx\nthread4:%#lx\nthread5:%#lx\nthread6:%#lx\n",thread1, thread2, thread3, thread4, thread5, thread6);pthread_join(thread1, NULL);pthread_join(thread2, NULL);pthread_join(thread3, NULL);pthread_join(thread4, NULL);pthread_join(thread5, NULL);pthread_join(thread6, NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

运行结果:

程序代码:

#include<myhead.h>
int main(int argc, char const *argv[])
{int pipefd[2] = { 0 };if (pipe(pipefd) == -1){perror("pipe error");return -1;} printf("pipefd[0]=%d, pipefd[1]=%d\n", pipefd[0], pipefd[1]);pid_t pid = fork();if (pid > 0){close(pipefd[0]);char wbuf[128] = "";while (1){bzero(wbuf, sizeof(wbuf));fgets(wbuf, sizeof(wbuf), stdin);wbuf[strlen(wbuf) - 1] = 0;write(pipefd[1], wbuf, strlen(wbuf));if (strcmp(wbuf, "quit") == 0){break;}}close(pipefd[1]);wait(NULL);}else if (pid == 0){close(pipefd[1]);char rbuf[128] = "";while (1){bzero(rbuf, sizeof(rbuf));read(pipefd[0], rbuf, sizeof(rbuf));printf("父进程传入的字符串是:%s\n", rbuf);if (strcmp(rbuf, "quit") == 0){break;}}close(pipefd[0]);exit(EXIT_SUCCESS);}else{perror("fork error");return -1;}return 0;
}

运行结果:

程序代码:

#include <myhead.h>int main(int argc, const char *argv[])
{if(mkfifo("./mkfifo1",0664)==-1){perror("mkfifo error");return -1;}if(mkfifo("./mkfifo2",0664)==-1){perror("mkfifo error");return -1;}getchar();system("rm mkfifo1");system("rm mkfifo2");return 0;
}
#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid>0){//父进程//向管道1中写入数据int fd=-1;if((fd=open("./mkfifo1",O_WRONLY))==-1){perror("open error");return -1;}char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));//	printf("请输入>>>:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;write(fd,wbuf,sizeof(wbuf));if(strcmp(wbuf,"quit")==0){break;}}close(fd);}else if(pid==0){//子进程 //从管道2中读取数据int fd1=-1;if((fd1=open("./mkfifo2",O_RDONLY))==-1){perror("open error");return -1;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));read(fd1,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}printf("程序B发送的消息:%s\n",rbuf);}close(fd1);}else{perror("fork error");return -1;}return 0;
}
#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid>0){//父进程//从管道1中读取数据int fd=-1;if((fd=open("./mkfifo1",O_RDONLY))==-1){perror("open error");return -1;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));//	printf("请输入>>>:");//	fgets(wbuf,sizeof(wbuf),stdin);//	wbuf[strlen(wbuf)-1]=0;read(fd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}printf("从程序A中读取的数据:%s\n",rbuf);}close(fd);}else if(pid==0){//子进程 //向管道2中写入数据int fd1=-1;if((fd1=open("./mkfifo2",O_WRONLY))==-1){perror("open error");return -1;}char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));//	printf("请输入>>>:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;write(fd1,wbuf,sizeof(wbuf));if(strcmp(wbuf,"quit")==0){break;}//	printf("程序B发送的消息:%s\n",rbuf);}close(fd1);}else{perror("fork error");return -1;}return 0;
}

程序代码:

#include <myhead.h>int main(int argc, const char *argv[])
{if(mkfifo("./mkfifo1",0664)==-1){perror("mkfifo error");return -1;}if(mkfifo("./mkfifo2",0664)==-1){perror("mkfifo error");return -1;}getchar();system("rm mkfifo1");system("rm mkfifo2");return 0;
}
#include<myhead.h>
void *send_message(void *arg)
{int wfd=-1;if((wfd=open("./fasong",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));	if(strcmp(wbuf,"quit")==0)break;}close(wfd);pthread_exit(NULL);
}
void *receive_message(void *arg)
{int rfd=-1;if((rfd=open("./jieshou",O_RDONLY))==-1){perror("open error");return  NULL;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));read(rfd,rbuf,sizeof(rbuf));printf("收到信息:%s\n",rbuf);if(strcmp(rbuf,"quit")==0)break;}close(rfd);pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid2;if(pthread_create(&tid1,NULL,send_message,NULL)!=0){puts("tid1 create error");return -1;}if(pthread_create(&tid2,NULL,receive_message,NULL)!=0){puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0){puts("user2 closed send&receive");}return 0;
}
#include<myhead.h>
void *send_message(void *arg)//发送信息
{int wfd=-1;if((wfd=open("./fasong",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));if(strcmp(wbuf,"quit")==0)  break;}close(wfd);pthread_exit(NULL);
}
void *receive_message(void *arg)//接收消息
{int rfd=-1;if((rfd=open("./jieshou",O_RDONLY))==-1){perror("open error");return  NULL;}char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));read(rfd,rbuf,sizeof(rbuf));printf("收到信息:%s\n",rbuf);if(strcmp(rbuf,"quit")==0)break;}close(rfd);pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//创建两个线程//发送if(pthread_create(&tid1,NULL,send_message,NULL)!=0){puts("tid1 create error");return -1;}//接收if(pthread_create(&tid2,NULL,receive_message,NULL)!=0){puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0){puts("user1 closed send&receive"); }return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484932.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消 前言一 、关于NotificationServiceExtension1. 创建2. 推送机制3. API 实例方法二、 APNS Push Payload2. 来电邀请2. 来电取消三、数据共享3. 配置共享域四 知识点就到这里,下面是主要代码4. 1 Notificati…

C++ 八数码问题理解 `IDA*` 算法原则:及时止损,缘尽即散

1.前言 八数码是典型的状态搜索案例。如字符串转换问题、密码锁问题都是状态搜索问题。 状态搜索问题指由一种状态转换到到最终状态&#xff0c;求解中间需要经过多少步转换&#xff0c;或者说最小需要转换多少步&#xff0c;或者说有多少种转换方案。本文和大家聊聊八数码问…

如何在Shopify 创建Mega Menu

在Shopify上创建Mega Menu可以通过以下步骤完成&#xff1a; 1. 选择适合的主题 首先&#xff0c;选择一个适合的主题&#xff0c;因为不是所有的Shopify主题都支持Mega Menu。确保选择一个具有自定义菜单功能的主题&#xff0c;或者您可以使用Shopify App Store中的应用程序来…

(十三)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…

mysql索引问题

今天在工作写项目的时候&#xff0c;突然发现很多地方没有加索引&#xff0c;然后我就去加了&#xff0c;查了不少资料&#xff0c;捡起来了不少东西&#xff0c;来简单聊一聊&#xff0c;工作中最重要的一个细节&#xff1a;索引 mysq的存储结构 首先要聊一聊mysql的存储模式…

Docker镜像和容器

1.Docker的架构和底层技术 Docker提供了一个开发、打包、运行APP&#xff08;应用application&#xff09;的平台把APP和底层infrastructure&#xff08;基础设备&#xff09;隔离开来 ApplicationDocker EngineInfrastructure(physical/virtual) 1.1Docker Engine组成 后台…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Imagewheel私人图床搭建结合内网穿透实现无公网IP远程访问教程

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

工具篇-- 定时任务quartz

文章目录 前言一、quartz 介绍:二、quartz 的简单使用:2.1 引入jar&#xff1a;2.2 定义任务&#xff1a; 三、quartz 核心组件:3.1 JobDetail&#xff1a;3.1.1 JobDetail介绍&#xff1a;3.1.2 JobDetail 和job 的关系&#xff1a; 3.2 trigger&#xff1a;3.2.1 trigger 介绍…

基于Spring Boot的安康旅游网站的设计与实现,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1760645517548793858

【动态规划专栏】专题四:子数组问题--------最大子数组和环形子数组的最大和

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…