<操作系统>读者写者问题(读者优先)C语言实现

2023-05-16

问题描述
在这里插入图片描述
在这里插入图片描述

代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
sem_t mutex,ws;
int readercount=0;
int readernum;

void *read_i(int a)
{ 

   printf("第%d号读者想读\n",a+1);
   sem_wait(&mutex);
   readercount++;
   if(readercount==1)
   sem_wait(&ws);
   sem_post(&mutex);
   
   printf("第%d号读者开始读文章\n",a+1);
   sleep(1);
   printf("第%d号读者读完文章\n",a+1);
   sem_wait(&mutex);
   readercount--;
   if(readercount==0)
   sem_post(&ws);
   sem_post(&mutex);
   
}
void *write_j(int b)
{ 
    printf("第%d号写者想写\n",b+1);
    sem_wait(&ws);
    printf("第%d号写者开始写\n",b+1);
    sleep(1);
    printf("第%d号写者写完文章\n",b+1);
    sem_post(&ws);

}
int main()
{
	int sg1,sg2;
        pthread_t writer[10],reader[10];
	sg1=sem_init(&mutex,0,1);
	sg2=sem_init(&ws,0,1);
for(int i=0;i<=9;i++)
{      
        pthread_create(&reader[i],NULL,(void *)read_i,i); 
        pthread_create(&writer[i],NULL,(void *)write_j,i);
        sleep(1);
}

for(int j=0;j<=9;j++)
{    
         pthread_join(reader[j],NULL);
}

for(int k=0;k<=9;k++)
{    
          pthread_join(writer[k],NULL);
}
         
        
      
          sleep(2);


	return 0;

}

运行截图
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

<操作系统>读者写者问题(读者优先)C语言实现 的相关文章

  • 小白学协程笔记2-c语言实现协程-2021-2-10

    文章目录 前言 一 c语言中协程切换方式 二 使用setjmp 和 longjmp实现协程切换 1 setjmp和longjmp函数简介 2 协程实现 三 使用switch case实现协程切换 1 switch case小技巧 2 协程实
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 红帽7.9部署telnet服务

    升级ssh 为预防万一提前配置telnet服务 安装软件包 yum install telnet server yum install xinetd xinetd加入开机自启 systemctl enable xinetd service
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • Anaconda 安装 Python 库(MySQLdb)的方法-(转)

    安装python库的过程中 最重要的地方就是版本需要兼容 其中操作系统为64位 Python为2 X 64位 下载安装文件的时候也要注意版本匹配 其中文件名中包含的cp27表示CPython 2 7版本 cp34表示CPython 3 4
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • Ubuntu下Pycharm安装破解

    在安装pycharm之前需要先安装jdk8以上的版本 安装pycharm的JDK环境 Pycharm需要JDK环境解析 xff0c 否则在安装过程中报错 依次执行一下几条command sudo add apt repository ppa
  • 二分法查找某个数的位置(Java实现)

    public class BinaryFind public static void main String args int a 61 new int 1000000 省去排序的步奏 for int i 61 0 i lt a lengt
  • 好东西一定是时间沉淀的产物!!!

    做事情 xff0c 不要期待一蹴而成 xff0c 因为好东西一定是时间沉淀的产物 xff01 xff01 xff01 总结 xff1a 细水长流
  • Tomcat无法正常工作

    场景一 xff1a 曾经下载过Tomcat xff0c 直接删除目录后又安装 出错原因 xff1a 只删除了Tomcat的相关目录 xff0c 但注册表没有删除 解决方案 xff1a 找到你重下的Tomcat xff0c 点击运行卸载文件
  • JSP内置对象错误Access restriction

    错误内容 xff1a Multiple annotations found at this line Access restriction The method 39 ServletRequest getParameter String 3
  • 搭建Android开发平台(Android studio)

    引论 开发任何软件都需要有一款顺手的开发工具 xff0c 就像是剑客应该有一把属于自己的宝剑 xff08 独孤求败级别的除外 xff09 xff0c 开发Android APP更是如此 在这里我们选择的开发工具是android studio
  • gcc编译运行c文件

    1 新建 c文件 xff08 如A c xff09 2 在当前目录下打开终端 3 输入指令 xff1a gcc c 文件名 c gcc 文件名 o o 文件名 文件名
  • ssh用户和密码远程登录命令

    ssh user 64 url p passwd
  • http工作原理

    1 域名服务器将域名转换为IP地址 xff0c http根据IP地址连接到服务器 2 发送请求 xff08 post或get xff09 3 服务器进行响应 xff0c 返回被请求的资源 4 浏览器接收文件解释并最终呈现给用户
  • Android老师作业2

    因为我没有保存 xff0c 所以没有老师发的图片 xff0c 不过考虑到这个项目考察的是UI布局和国际化 xff0c 图片的作用只是为了美观 xff0c 所以我决定只实现布局和国际化就好了 从截图上看 xff0c 最好的布局应该是用网格 x
  • TCP会话开始与结束

    会话开始 xff1a 客户端向服务器发送SYN消息 服务器接收SYN消息并发送SYN ack消息 客户端接收SYN ack并发送ack消息 服务器接收ack xff0c 连接建立会话开始 会话结束 xff1a 客户端向服务器发送fin消息
  • android启动的四种模式

    standard xff1a 顾名思义 xff0c 标准的启动模式 xff0c 也即默认的启动模式 他会创建 一个任务栈将打开的所有activity都放入 退出时按后进先出的原则依次将activity退出 这种启动模式看似没有问题 xff0
  • android老师布置的作业四

    都看过题 xff0c 题目不描述 首先 xff0c 我们需要制作静态界面然后才能将各个界面集成到一起 主界面设计分析 使用布局方式 xff1a absolute xff0c 优点是随便拖动 xff0c 缺点是只适用于一种手机屏幕 xff0c
  • android老师作业五

    UI布局以前做过 xff0c 不提了 其他的问题主要是安装1个4 0的模拟器 xff0c 不然由于安全性问题无法运转 文件存储用SharedPreferences这个工具类 xff0c 其他的关于这个项目的一切全在代码中吧 代码 xff1a
  • poj1287解题报告

    对于学过图和Prim算法的人来说 xff0c 此题是一道不折不扣的水题 xff0c 尤其是输入范围限定在了50之内 xff0c 所以即便我用了O xff08 n 3 xff09 的算法也只用了16MS就AC了 前期建图 xff0c 我用的是
  • zoj3961解题报告

    借今年浙江省赛的题练练手 首先 xff0c 由题意知 xff0c A与B发信息 xff0c 当A与B连续互相发信息m天时 xff0c 好感度point 43 1 输入有A向B发信息的天数与B向A发信息的起止天数 xff0c 具体格式看题 n
  • poj3617解题报告

    题意 xff1a 输入一个整数n xff0c 后面跟着n行大写字母 xff0c 现要求对这些字母进行排序 xff0c 要求字典序最小 xff0c 每80个字母一行且字母只能从两端任取一个 根据上面的信息我们不难想到若使字典序最小则只需从两端
  • Android老师作业六

    关于这次的Android作业 xff0c 我整理了以下几个要点 第一个是UI设计 xff0c 因为做APP第一步就是他 xff0c 避是避不掉的 UI一定要注意主界面分为两部分 xff0c 上部分是方便插入的静态页面 xff0c 下面是个l
  • 架构组件 ---- ViewBinding 视图绑定 入门

    翻译自android官网 xff0c 可直接去官网观看 架构组件 ViewBinding 视图绑定 入门 设置说明用法在 Activity 中使用视图绑定在 Fragment 中使用视图绑定 与 findViewById 的区别与数据绑定的
  • <操作系统>读者写者问题(读者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio