• 主线程创建4个子线程T1、T2、T3、T4,
  • 主线程在4个子线程退出后,才退出
  • 线程T1、T2、T3、T4的运行时代码如下:
#include <unistd.h> // sleep函数声明在该头文件中void *T1_entry(void *arg)
{sleep(2);  // 睡眠2秒,不准删除此条语句,否则答题无效puts(“T1”);
}void *T2_entry(void *arg)
{sleep(1);  // 睡眠1秒,不准删除此条语句,否则答题无效puts(“T2”);
}void *T3_entry(void *arg)
{sleep(1);  // 睡眠1秒,不准删除此条语句,否则答题无效puts(“T3”);
}void *T4_entry(void *arg)
{puts(“T4”);
}
  • 使用信号量或者条件变量机制(而不是使用sleep函数),使得这四个线程满足如下制约关系:

    • T1的print语句执行后,T2和T3才可以执行print语句
    • T2和T3的print语句执行后,T4才可以执行print语句
  • 程序输出结果为
T1
T2
T3
T4

或者

T1
T3
T2
T4

code:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>int count=0;pthread_mutex_t mutex;
pthread_cond_t  wait1;
pthread_cond_t  wait2;
pthread_cond_t  wait3;void *T1_entry(void *arg){int *p=arg;pthread_mutex_lock(&mutex);while(count!=(*p))pthread_cond_wait(&wait1,&mutex);sleep(2);puts("T1");count++;pthread_cond_broadcast(&wait2);pthread_mutex_unlock(&mutex);
}void *T2_entry(void *arg){int *p=arg;pthread_mutex_lock(&mutex);while(count<1||count>2)pthread_cond_wait(&wait2,&mutex);sleep(1);puts("T2");count++;pthread_cond_signal(&wait3);pthread_mutex_unlock(&mutex);
}void *T3_entry(void *arg){int *p=arg;pthread_mutex_lock(&mutex);while(count<1||count>2)pthread_cond_wait(&wait2,&mutex);sleep(1);puts("T3");count++;pthread_cond_signal(&wait3);pthread_mutex_unlock(&mutex);
}void *T4_entry(void *arg){int *p=arg;pthread_mutex_lock(&mutex);while(count!=(*p))pthread_cond_wait(&wait3,&mutex);puts("T4");pthread_mutex_unlock(&mutex);
}int main(){pthread_t pid[4];int j[4];int i;pthread_mutex_init(&mutex,NULL);pthread_cond_init(&wait1,NULL);pthread_cond_init(&wait2,NULL);pthread_cond_init(&wait3,NULL);for(i=0;i<4;i++){j[i]=i;if(i==0)pthread_create(&pid[i],NULL,T1_entry,(void*)&j[i]);if(i==1)pthread_create(&pid[i],NULL,T2_entry,(void*)&j[i]);if(i==2)pthread_create(&pid[i],NULL,T3_entry,(void*)&j[i]);if(i==3)pthread_create(&pid[i],NULL,T4_entry,(void*)&j[i]);}pthread_join(pid[3],NULL);return 0;
}

操作系统上机题目(多线程2)相关推荐

  1. 操作系统上机题目(多线程1)

    主线程创建10个子线程 第0个子线程计算从01加到10的和 - 第1个子线程计算从11加到20的和 - 第9个子线程计算从91加到100的和 2. 主线程归并10个子线程的计算结果,最终结果为5050 ...

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

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

  3. 操作系统上机题目(多进程2)

    1.主进程创建2个子进程,主进程通过两个管道分别与两个子进程连接 2.第一个子进程计算从1加到50的和,并将结果通过管道送给父进程 3.第一个子进程计算从50加到100的和,并将结果通过管道送给父进程 ...

  4. 操作系统上机题目(多进程1)

    1.创建1个子进程 2.程通过管道与子进程连接 子进程的标准输出连接到管道的写端 主进程的标准输入连接到管道的读端 3.进程中调用exec("echo", "echo&q ...

  5. 2014年北邮网研院复试上机题目

    2014年北邮网研院复试上机题目 2014.网研院.Problem A.分数加法 链接: http://10.105.242.83/problem/299 题目描述 求2^-a + 2^-b,其中a和 ...

  6. 操作系统上机考试复习

    操作系统上机考试复习 文件相关 1.打开文件 #include <sys/stat.h> #include <fcntl.h>int open(const char* path ...

  7. 大学操作系统上机实验

      上机实验指导书 课程名称 操作系统 主撰人  刘天波 审核人  栾方军 沈阳建筑大学信息学院 2014 年3月 课程名称:操作系统 上机学时:16 适用专业:计算机科学与技术 先修课程:C语言 一 ...

  8. 操作系统上机随笔《实验一》

    OK,今天来写一下这个实验一 1,实验目的 深刻理解线程和进程的概念,掌握线程与进程在组成成分上的差别,以及与其相适应的通讯方式和应用目标. 2,实验内容 以Linux系统进程和线程机制为背景,掌握f ...

  9. c语言 集中上机题目,C语言集中上机题目.doc

    C语言集中上机题目.doc C语言集中上机题目 第一次实验 循环 1 编程 1.1 打印出以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * ...

最新文章

  1. 【下载!】实时计算正当时!助你轻松get Apache Flink 动向!
  2. [论文阅读] (03) 清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
  3. 让VC编译的Release版本程序在其他机器上顺利运行
  4. C#事件中的两个参数(object sender,EventArgs e)
  5. java wav 切割_WAV音频定长分段切取
  6. 为什么用 windbg 看 !address 显示出的Free是128T 大小?
  7. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...
  8. Linux设备中的并发控制
  9. JQueryDOM之创建节点
  10. 用Windows Live Writer写51cto博客
  11. Javascript中五种定义对象的方法
  12. 代码坏的味道17:狎昵关系 (Inappropriate Intimacy)
  13. 用计算机算出用不用减肥,体脂率计算器有什么用
  14. python编写背单词程序
  15. 九九乘法表(99)详解
  16. 操作系统实践-BIOS
  17. android网络的评分机制、连接国内ap wifi不回连问题
  18. 国家网络信息安全第一章
  19. Python二级--奖学金评选
  20. 通过XML转换下载.xlsx格式的excel文件

热门文章

  1. gromacs 安装_带你入门带你飞 gromacs材料计算模拟系列
  2. java xml dom getelementbyid,DOM中常见的元素获取方式
  3. 如何恢复被删短信_手机便签记事本的内容如何恢复?快试试这款好用的便签
  4. 程序员有哪些可以写博客的网站?
  5. 【APICloud系列|24】 MNNavigationMenu模块(导航菜单)的实现
  6. 我是如何使用git把本地代码上传到CODECHINA上的,值得借鉴
  7. vue项目安装less_部署vue项目、安装mongodb
  8. java猜数字小游戏_Java实现简单猜数字小游戏
  9. websocket的加密和解密
  10. windows 服务部署管理