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个线程(多线程)相关推荐

  1. 操作系统上机作业--多线程排序

    sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...

  2. 操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)

    pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务,并将结果返回 ...

  3. 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)

    pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...

  4. 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)

    pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...

  5. 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)

    pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...

  6. 操作系统上机作业--实现shell(2)(多进程)

    sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...

  7. 操作系统上机作业--实现shell(1)(多进程)

    sh1.c: 实现shell程序,要求具备如下功能 支持命令参数 $ echo arg1 arg2 arg3 $ ls /bin /usr/bin /home 实现内置命令cd.pwd.exit $ ...

  8. 操作系统上机作业--实现mysys(多进程)

    mysys.c: 实现函数mysys,用于执行一个系统命令,要求如下 mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使用fork/exec/wait系统调用实现m ...

  9. 操作系统上机作业--使用系统调用实现mycp

    mycp.c的功能与系统cp程序相同 将源文件复制到目标文件,例子如下: 要求使用系统调用open/read/write/close实现 $ cat /etc/passwd root:x:0:0:ro ...

最新文章

  1. 3D目标检测深度学习方法数据预处理综述
  2. intel 核显linux驱动程序,10nm来也!Intel 11代核显Linux驱动功能冻结
  3. 从源码深处体验Spring核心技术--基于注解的IOC初始化
  4. Oracle 数据库之最:你见过最高的 SQL Version 是多少?
  5. Moodle: 查询任意数据库
  6. face.evoLVe:高性能人脸识别开源库,内附高能模型
  7. Eclipse右下角一直提示Computing additional info解决办法
  8. TensorFlow2.0:数据统计
  9. XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用原点null
  10. 微软Azure、谷歌GAE、亚马逊AWS比較
  11. 后端向前端返回图片URL,并向后端传递base64格式URL
  12. Using Beyond Compare with Version Control Systems(ZZ)
  13. DOS批处理文件加密文件夹
  14. 【Lilishop商城】No2-1.确定项目结构和数据结构(用户、商品、订单、促销等模块)
  15. 墙面有几种装修方法_外墙有几种装修方法
  16. 问题解决:Invalid version number:Version number may be negative or greater than 255
  17. 推荐系统三十六式——学习笔记(三)
  18. 【数据分析师求职面试指南】实战技能部分
  19. 虚函数,虚函数表,虚函数实现原理,虚函数实现机制,虚函数解决的问题
  20. C1实训-Java薪资转换(适合初学者)

热门文章

  1. 计算机c盘能分区吗,电脑C盘怎么分区
  2. elisa标准曲线怎么做_ELISA标准曲线绘制
  3. 《鸿蒙理论知识06》HarmonyOS概述之应用开发基础知识
  4. MVC 之var与dynamic
  5. css3制作广告栏效果的疑问?
  6. 什么是 HTML5?
  7. vue笔记(三)生命周期、组件(嵌套)、数据传递
  8. 将Array、Dictionary等集合类的序列化和反序列化
  9. 树-二叉树、满二叉树和完全二叉树
  10. [Swift]LeetCode682. 棒球比赛 | Baseball Game