操作系统——控制进程并发,高效并发正确誊抄
/*控制进程并发,实现高效正确的并发誊抄过程*/#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include <iostream>
using namespace std;HANDLE Mutex;
HANDLE buf1_e;
HANDLE buf1_f;
HANDLE buf2_e;
HANDLE buf2_f;typedef struct _THREADDATA
{FILE *infile;char *buf1;char *buf2;
}*LPTHREADDATA, THREADDATA;DWORD WINAPI get(LPVOID lParam)
{LPTHREADDATA pData = (LPTHREADDATA)lParam;for (;*pData->buf1!=EOF;) {WaitForSingleObject(buf1_e,INFINITE);//p*pData->buf1=fgetc(pData->infile); ReleaseSemaphore(buf1_f,1,NULL);//v}return 0;
}DWORD WINAPI copy(LPVOID lParam)
{LPTHREADDATA pData = (LPTHREADDATA)lParam;for (;*pData->buf1!=EOF;) {WaitForSingleObject(buf1_f,INFINITE);//p(buf1_f)WaitForSingleObject(buf2_e,INFINITE);//p(buf2_e)*pData->buf2=*pData->buf1;ReleaseSemaphore(buf1_e,1,NULL);//v(buf1_e)ReleaseSemaphore(buf2_f,1,NULL);//v(buf2_f)}return 0;
}DWORD WINAPI put(LPVOID lParam)
{LPTHREADDATA pData = (LPTHREADDATA)lParam;for (;*pData->buf1!=EOF;) {WaitForSingleObject(buf2_f,INFINITE);//pcout<<*pData->buf2; ReleaseSemaphore(buf2_e,1,NULL);//v}return 0;
}int main()
{// Mutex=CreateMutex(NULL,FALSE,NULL); buf1_e=CreateSemaphore(NULL,1,1,NULL);buf1_f=CreateSemaphore(NULL,0,1,NULL);buf2_e=CreateSemaphore(NULL,1,1,NULL);buf2_f=CreateSemaphore(NULL,0,1,NULL);FILE *infile=fopen("in.txt","r");char buf1,buf2;LPTHREADDATA pData = new THREADDATA;pData->infile=infile;pData->buf1=&buf1;pData->buf2=&buf2;DWORD ThreadId1,ThreadId2,ThreadId3;::CreateThread(NULL, 0, copy, (LPVOID)pData, 0, &ThreadId2); ::CreateThread(NULL, 0, put, (LPVOID)pData, 0, &ThreadId3); ::CreateThread(NULL, 0, get, (LPVOID)pData, 0, &ThreadId1); Sleep(20);//getch();fclose(infile);return 0;
}
操作系统——控制进程并发,高效并发正确誊抄相关推荐
- 【操作系统】进程、线程、协程和并发、并行
文章目录 一.并发介绍 1. 进程和线程 (1)进程 (2)线程 (3)进程与线程的区别 (4)任务调度 (5)何时使用多进程,何时使用多线程? 2. 线程和协程 (1)协程 (2)协程和线程的区别 ...
- Linux并发程序课程设计报告,网络操作系统课程设计--进程机制与并发程序设计-linux下生产者与消费者的问题实现.doc...
网 络 操 作 系 统 课 程 设 计 网络操作系统课程设计 设计内容:进程机制与并发程序设计inux下生产者与消费者的问题实现进程机制与并发程序设计inux下生产者与消费者的问题实现 (1)掌握基本 ...
- 《深入理解Java虚拟机》笔记6——高效并发
第五部分 高效并发 第十二章 Java内存模型与线程 并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类"压榨"计算机运算能力的最有力 ...
- 『操作系统』 进程的描述与控制 Part3 管程
文章目录 2.6 管程 管程的基本概念 1.管程的组成 2.管程的主要特性 3.条件变量 4.管程的实现 5.管程和进程的异同点 练习题 2.7 进程通信 进程通信的类型 共享存储器系统 练习题 消息 ...
- 『操作系统』 进程的描述与控制 Part2 进程同步
文章目录 2.4 进程同步 2.4.1 进程同步的基本概念 1.两种制约关系 2.临界资源 3.临界区 4.同步机制应遵循的规则 练习题 练习题 2.4.2 实现互斥的软硬件方法 算法1 算法2 算法 ...
- 深入理解Java虚拟机-高效并发
本博客主要参考周志明老师的<深入理解Java虚拟机>第二版 读书是一种跟大神的交流.阅读<深入理解Java虚拟机>受益匪浅,对Java虚拟机有初步的认识.这里写博客主要出于以下 ...
- 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发
作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...
- 『操作系统』 进程的描述与控制 Part4 线程
文章目录 2.8 线程及其实现 1.线程的概念 练习题 2.线程的实现及控制 例题 练习题 2.8 线程及其实现 1.线程的基本概念 2.线程的实现及控制 引入进程 的目的: 使多个程序能并发执行,提 ...
- 『操作系统』 进程的描述与控制 Part 1 前驱图与程序执行
文章目录 2.1 前趋图和程序执行 2.1.1 程序的顺序执行及其特征 1. 程序的顺序执行 2.程序顺序执行时的特征 2.1.2 前趋图 2.1.3 程序的并发执行及其特征 1. 程序的并发执行 2 ...
最新文章
- 求解稀疏优化问题——增广拉格朗日方法+半光滑牛顿法
- 《深入理解java虚拟机》
- linux shell 获取当前正在执行脚本的绝对路径
- 阿里云 FaaS 架构设计与创新实践
- python numpy官网_Python Numpy 教程(上)
- 使用XMANAGER 联接LINUX 后使用SQLPLUS 不能使用BACKSPACE 回格键.
- zbrush 添加纹理贴图_zbrush零基础新手必看入门讲解
- gnuradio上怎么使用python文件_使用Python从PDF文件中提取数据
- linux中updatedb命令详解,updatedb命令
- 第44课 角谷猜想 动动脑 第2题 阅读程序写结果
- 编辑器扩展_开发者必备,可扩展编辑器tui.editor和TOAST UI组件家族
- [转]综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation
- 如何使用.NET从十六进制颜色代码中获取颜色?
- win7 64位系统配置服务器,Tomcat服务器win764位配置方法
- STC学习:光敏开关
- 计算机组成原理(4)-中央处理器CPU
- Jupyter Notebook简洁教程
- SpringBoot2尚硅谷笔记
- PUE 1.2,总投资达36.4亿,17600个机柜!天和防务拟建陕西最大数据中心
- mysql 修改字段值语句_mysql修改字段语句
热门文章
- 【飞腾平台安装windows arm 11系统】
- 【积累】《国产操作系统(麒麟)运维师》课程笔记-第6章-中
- CPU的cache工作原理
- 中国换热器行业“十四五”规划及未来需求规模报告2021-2027年
- 【JZOJ5078】【GDOI2017第三轮模拟day2】魔法咒语
- 平行志愿计算机录取顺序,顺序志愿和平行志愿傻傻分不清?选大学的解释让我瞬间就懂了!...
- 高内聚低耦合通俗解释
- 和总裁、专家交朋友,华为云助推政企智能化升级又做到前面去了
- PHP目录函数 readdir (从目录句柄中读取条目)
- openjudge 1.5.20 球弹跳高度的计算