操作系统上机作业--创建N个线程(多线程)
ring.c: 创建N个线程,它们构成一个环
• 创建N个线程:T1、T2、T3、… TN
• T1向T2发送整数1
• T2收到后将整数加1
• T2向T3发送整数2
• T3收到后将整数加1
• T3向T4发送整数3
• …
• TN收到后将整数加1
• TN向T1发送整数N
实现思路:
循环创建N
个线程,并在创建线程的时候对线程函数传入线程序数,buffer
初始为0
,当传入参数和buffer
相等的时候,将buffer
的值加一,并唤醒等待条件量wait_cond
的所有线程,否则线程等待wait_cond
。
第一个线程传入的参数为0
,和buffer
相等,执行相应操作,并唤醒后续线程
实现代码:
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>#define N 10int buffer=0;pthread_mutex_t mutex;
pthread_cond_t wait_cond;void *T(void *arg){int i;int item;int *param=(int *)arg;pthread_mutex_lock(&mutex);while((*param)!=buffer){pthread_cond_wait(&wait_cond,&mutex);}printf("线程▼:T%d Put:%d\n",(*param)+1,(*param)+1);buffer=(buffer+1)%N;pthread_cond_broadcast(&wait_cond);pthread_mutex_unlock(&mutex);}int main(){pthread_t pid[N];int j[N];int i;pthread_mutex_init(&mutex,NULL);pthread_cond_init(&wait_cond,NULL);for(i=0;i<N;i++){j[i]=i;pthread_create(&pid[i],NULL,T,(void*)&j[i]);}for(i=0;i<N;i++)pthread_join(pid[i],NULL);return 0;
}
欢迎留言交流。。。
操作系统上机作业--创建N个线程(多线程)相关推荐
- 操作系统上机作业--多线程排序
sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...
- 操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)
pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务,并将结果返回 ...
- 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)
pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...
- 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)
pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...
- 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)
pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...
- 操作系统上机作业--实现shell(2)(多进程)
sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...
- 操作系统上机作业--实现shell(1)(多进程)
sh1.c: 实现shell程序,要求具备如下功能 支持命令参数 $ echo arg1 arg2 arg3 $ ls /bin /usr/bin /home 实现内置命令cd.pwd.exit $ ...
- 操作系统上机作业--实现mysys(多进程)
mysys.c: 实现函数mysys,用于执行一个系统命令,要求如下 mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使用fork/exec/wait系统调用实现m ...
- 操作系统上机作业--使用系统调用实现mycp
mycp.c的功能与系统cp程序相同 将源文件复制到目标文件,例子如下: 要求使用系统调用open/read/write/close实现 $ cat /etc/passwd root:x:0:0:ro ...
最新文章
- 3D目标检测深度学习方法数据预处理综述
- intel 核显linux驱动程序,10nm来也!Intel 11代核显Linux驱动功能冻结
- 从源码深处体验Spring核心技术--基于注解的IOC初始化
- Oracle 数据库之最:你见过最高的 SQL Version 是多少?
- Moodle: 查询任意数据库
- face.evoLVe:高性能人脸识别开源库,内附高能模型
- Eclipse右下角一直提示Computing additional info解决办法
- TensorFlow2.0:数据统计
- XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用原点null
- 微软Azure、谷歌GAE、亚马逊AWS比較
- 后端向前端返回图片URL,并向后端传递base64格式URL
- Using Beyond Compare with Version Control Systems(ZZ)
- DOS批处理文件加密文件夹
- 【Lilishop商城】No2-1.确定项目结构和数据结构(用户、商品、订单、促销等模块)
- 墙面有几种装修方法_外墙有几种装修方法
- 问题解决:Invalid version number:Version number may be negative or greater than 255
- 推荐系统三十六式——学习笔记(三)
- 【数据分析师求职面试指南】实战技能部分
- 虚函数,虚函数表,虚函数实现原理,虚函数实现机制,虚函数解决的问题
- C1实训-Java薪资转换(适合初学者)