java 进程同步代码_java 实现进程间的同步(源代码)

操作系统课程设计:实现进程间的同步。 有问题留言

import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { final static int NUMS = 6; // 进程的数目 final static int RUN = 1; // 运行完 final static int STOP = 0; // 阻塞态 static int[] status = new int[NUMS]; // 进程的状态 不运行 则阻塞 默认为禁止 static Semaphore s[] = null; // 信号量 final static int[] times = new int[6]; //运行的次数 static Semaphore mutex = new Semaphore(1);// 信号量:控制对临界区的访问 static { s = new Semaphore[NUMS]; for (int i = 0; i < NUMS; i++) { s[i] = new Semaphore(1); // 初始化 } for (int j = 0; j < times.length; j++) { times[j] = 10; // 每个进程执行10次则结束 } } } /*********线程***********/ class process6 implements Runnable {// 进程线程 private int id; public process6(int id) { super(); this.id = id; } void test(int id) throws InterruptedException { // 测试当前进程是否可以运行 // 当自己没有运行,前置条件满足时 可以运行 switch (id) { case 0: if (Sign.times[0] > 0) { Sign.s[0].release(); Sign.times[0]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; case 1: if (Sign.status[0] == Sign.RUN && Sign.times[1] > 0) { // 如果进程1 // 已经运行完,进程2可以直接运行 Sign.s[1].release(); Sign.times[1]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; case 2: if (Sign.status[0] == Sign.RUN && Sign.times[2] > 0) { // 如果进程1 // 已经开启,进程3可以直接运行 Sign.s[2].release(); Sign.times[2]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; case 3: if (Sign.status[1] == Sign.RUN && Sign.times[3] > 0) { // 如果进程2已经开启,进程4可以直接运行 Sign.s[3].release(); Sign.times[3]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; case 4: if (Sign.times[4] > 0 && (Sign.status[1] == Sign.RUN || Sign.status[2] == Sign.RUN)) {// 如果进程2、或3已经运行完,进程5可以直接运行 Sign.s[4].release(); Sign.times[4]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; case 5: if (Sign.times[5] > 0 && (Sign.status[4] == Sign.RUN || Sign.status[3] == Sign.RUN)) {// 如果进程4或5已经运行完,进程6可以直接运行 Sign.s[5].release(); Sign.times[5]--; System.out.println("I am thread P" + (id + 1) + "。。。。。" + Sign.times[id]); } ; break; } } void print() {// 打印 每个进程的状态 for (int i = 0; i < Sign.NUMS; i++) { System.out.println("Thread P" + (i + 1) + " :" + Sign.status[i]); } } @Override public void run() { try { while (true) { // print(); //先打印全部进程状态 Sign.mutex.acquire(); // System.out.println("P" + id + " is testing!"); test(id); Sign.mutex.release(); // 判断当前进程运行的状况,不能运行 则 阻塞 Sign.s[id].acquire(); // 唤醒其他进程 不能运行 则阻塞 if (Sign.times[id] == 0 || Sign.times[id] < 0) { Sign.status[id] = Sign.RUN; // System.out.println("P" + (id+1) + " run out!"); Sign.mutex.acquire(); test((id + 1) % 6); test((id + 2) % 6); test((id + 3) % 6); test((id + 4) % 6); test((id + 5) % 6); Sign.mutex.release(); } else { // System.out.println(+"前置条件不够!"); Thread.currentThread().sleep((100)); } } } catch (Exception e) { e.printStackTrace(); } } } public class SYSV { /** * 任务3 进程/线程同步 */ public static void main(String[] args) { new Thread(new process6(0)).start(); new Thread(new process6(1)).start(); new Thread(new process6(2)).start(); new Thread(new process6(3)).start(); new Thread(new process6(4)).start(); new Thread(new process6(5)).start(); } }

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

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

相关文章

CSS日常公用样式与一些解决方案

一、自己总结的公用样式解析html, body, div, p, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, form, input, select, button, textarea, iframe, table, th, td { margin: 0; padding: 0; }img { border: 0 none; vertical-align: top; }ul, li { list-style-type: none; }h1…

上班族吐槽大集合:那些发生在公司的傻X奇遇

“明明不需要加班&#xff0c;到了点却偏偏没人起身走。”—— 小爱“头脑风暴&#xff0c;人越多效率越低下&#xff0c;最后风暴出来的东西也很难落实。”—— 好奇心“只是申请个办公用品&#xff0c;需要人事处签字&#xff0c;行政部签字&#xff0c;总监签字&#xff0c;…

C# 9 record 并非简单属性 POCO 的语法糖

最近升级专案到大统一 .NET 5 并使用 C#9 语法尝试改写套件,发现之前以为 record 只是简单属性 POCO 的简化语法糖的认知是错误。另外因为 POCO 属于需定义口语词&#xff0c;这边在本文定义简单属性 POCO 为 public class 类别 {public string ID{get;set}/*略*/} 只有属性的简…

java中注解的解析_全面解析Java中的注解与注释

注解一、什么是 Annotation&#xff1f; (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次&#xff0c;可以成为java 的一个类型。语法是以 开头简单来说&#x…

安装配置Mysql主从

环境&#xff1a; 主从服务器上的MySQL数据库版本同为5.1.34 主机IP&#xff1a;192.168.0.1 从机IP&#xff1a;192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id 1 log-binmysql-bin binlog-do-dbmysql #需要备份的数据库名&#xf…

玩的时候好好玩,学的时候好好学。不做半吊子

要用大块的时间学习&#xff0c;玩的时间也不能短。比如&#xff1a;一周七天六天认认真真学习&#xff0c;不要某天下午一犹豫懒惰就不去实验室了&#xff0c;没有任何目的度过了无聊的下午。同时又没有玩的计划所以&#xff0c;玩的也不开心。 现在要做到的就是正常的计划不要…

java实现思维导图_Java并发(思维导图)

1&#xff0c;线程状态转换无限期等待&#xff1a;限期等待&#xff1a;线程生命流程&#xff1a;2&#xff0c;实现方式代码实现样例【三种方式】&#xff1a;packagecom.cnblogs.mufasa.demo2;importjava.util.concurrent.Callable;public class test1_Runnable implementsRu…

这本免费小书,带你征服 GitHub!

GitHub 漫游指南&#xff0c;一本有趣又通俗的 GitHub 教程&#xff0c;想要成为 star 之王么&#xff1f;今天给大家分享一份通俗易懂的 GitHub 学习教程&#xff0c;即《GitHub 漫游指南》。看过了不下十套 GitHub 教程了&#xff0c;小编愿称它为最强&#xff01;虽然没有 G…

jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器

更新记录: 2011/6/5 jQuery formValidator 4.1.0 ver申明&#xff1a;1、所有DEMO引用jQuery类库的时候&#xff0c;类库后面直接跟了版本号——表示插件支持的最高类库版本号2、插件的命名&#xff1a;插件名版本号&#xff0c;压缩版&#xff1a;插件名版本号min新增以下功能…

java context.write_Channel.write() 和 ChannelHandlerContext.write() 的区别

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。看了下netty 源代码, 终于明白了Channel.write() 和 ChannelHandlerContext.write() 的区别了网上说的都不是很清楚首先注明我的netty版本io.nettynetty-all4.0.36.FinalChannelPipeline处理ChannelH…

美国劳工部揭露中国女人大数据,看完彻底傻眼了……

导读&#xff1a;“中国人的勤奋&#xff0c;令世界惊叹和汗颜&#xff0c;甚至有一点恐惧。”——科斯&#xff0c;诺贝尔经济学奖得主那么中国人的“勤奋”能否用数据来量化一下呢&#xff1f;答案是可以的。另外&#xff0c;如果以性别来区分&#xff0c;究竟是中国男性更勤…

计算机女神,互联网第一夫人!

大家好&#xff0c;我是鱼皮&#xff0c;今天带大家认识一位计算机领域的女神&#xff0c;有关她的故事非常有趣&#xff01;先聊聊我是如何认识女神的吧。那是我在大四做毕业设计的时候&#xff0c;误打误撞地选了一个图像处理相关的课题&#xff0c;要做一个显微图像处理分析…

mysql安装目录centos_CentOS mysql安装系统方法

CentOS linux由于同时具有与RHEL的兼容性和企业级应用的稳定性&#xff0c;又允许用户自由使用&#xff0c;因此得到了越来越广泛的应用。1]CentOS mysql安装解压[rootlocalhost root]# cd /usr/local/mysql/software[rootlocalhost software]# lsmysql-4.0.16.tar.gz[rootloca…

不吃不喝,两周业余时间研究(cisco SCE CM )

最近比较忙&#xff0c;比较烦&#xff0c;不想说话&#xff0c;想打人&#xff0c;想发脾气了&#xff1b; 这几天比较累&#xff0c;相当的累&#xff0c;这两个星期什么都不顺心&#xff0c;心情也很低落 这两个星期维护的移动、广电网络都出现问题了&#xff0c;o(︶︿︶)o…

NET问答: 如何从 string 中挖出所有的 number ?

咨询区 van:我现在有一个需求&#xff0c;想从 string 中找到所有的 number 并提取出来。举例如下&#xff1a;string test "1 hello" string test1 " 1 world" string test2 "helloworld 99"请问我该如何做&#xff1f;回答区 Tabares:这个简…

大数据告诉你:学历真的能改变命运

央视新闻曾做过关于高考的调查&#xff0c;结果有七成网友支持高考取消数学&#xff0c;看到新闻后&#xff0c;有一位网友却一针见血地评论道&#xff1a;数学考试存在的意义就是把这七成网友筛选掉。的确&#xff0c;虽然买菜不需要专业数学知识&#xff0c;但数学可以决定我…

mysql控制台教程视频教程_mysql 控制台操作

一、连接mysql数据库1.首先打开cmd进入dos窗口2.切换至目录&#xff1a;D:\MySql5.0\mysql-5.0.51b-win32\bin(即&#xff1a;mysql安装目录下面的bin目录&#xff0c;该目录内有很多exe执行文件)3.键入命令&#xff1a;mysql -uroot -p 回车&#xff0c;提示输入密码&#xff…

Dapr微服务应用开发系列5:发布订阅构建块

题记&#xff1a;这篇介绍发布订阅构建块&#xff0c;这是对事件驱动架构设计的一种实现落地。注&#xff1a;对于“Building Blocks”这个词组的翻译&#xff0c;我之前使用了“构件块”&#xff0c;现在和官方文档&#xff08;Dapr中文社区的贡献&#xff09;保持一致&#x…

【资源】机器学习资料包来袭

近几年&#xff0c;机器学习一直很火&#xff0c;小编也有意识地收集了机器学习相关的资源&#xff0c;经过长时间的积累和沉淀&#xff0c;已经拥有将近17G的吴恩达老师、李宏毅老师和王保明老师机器学习资料和视频。现在&#xff0c;小编准备将这些资料免费分享给大家&#x…

poj-2029 Get Many Persimmon Trees

my code: /* * 2029.cpp * * Created on: 2011-7-6 * Author: */#include <iostream>#include <cstring>using namespace std;const int MAXN 100 5;bool tree[MAXN][MAXN] {};    //坐标上是否有树int d[MAXN][MAXN] {};      //一维矩阵上的…