操作系统の实验四 windows中线程的创建和同步控制
摘要:
1、创建信号量
HANDLE CreateSemaphore(
LPSECURITY_ATTIBUTES lpSemaphoreAttributes,
LONG lInitialCount; //信号量初始值
LONG lMaximumCount, //信号量最大值
LPCTSTR lpName);
应用举例:
Empty=CreateSemaphore(NULL,10,10,NULL); //Semaphore empty=10;
2、P操作
DWORD WaitForSingleObject(
HANDLE hHandle, //等待对象句柄
DWORD dwMilliseconds); //指定以毫秒为单位的超时间隔。如果超时,即使对象的状态是非信号且没有完成,该函数也返回。如果其值为0,函数测试对象的状态并立刻返回,如果其值是INFINITE,函数从不超时。
其中hHandle。
应用举例:
WaitForSingleObject(empty,INFINITE); // P(empty);
3、V操作
1)BOOL ReleaseSemaphore(
HANDLE hSemaphore, //信号量句柄
LONG lReleaseCount, //信号量计数增加值,该值不可以为负或0
LPLONG lpPreviousCount); //返回信号量原来的值。
应用举例:ReleaseSemaphore(full,1,&b); //V(full);
2)BOOL ReleaseMutex(HANDLE Mutex); //V(mutex);
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include<iostream>
using namespace std; DWORD WINAPI Threadread(LPVOID);
DWORD WINAPI Threadwrite(LPVOID);
int a[]={-,-,-,-,-,-,-,-,-,-};//定义一个数据缓存a 定义一个数据缓存 HANDLE empty;
HANDLE full;
HANDLE mutex; int main()
{ DWORD threadId1;
DWORD threadId2; empty = CreateSemaphore(NULL,,,NULL); //初始化empty=10;
full = CreateSemaphore(NULL,,,NULL); //初始化full=0;
mutex = CreateMutex(NULL,FALSE,NULL); //初始化mutex=1; HANDLE read = CreateThread(NULL,,Threadread,(LPVOID),,&threadId1);
HANDLE write = CreateThread(NULL,,Threadwrite,(LPVOID),,&threadId2); Sleep();
if(write)
{
cout<<"write over"<<endl;
CloseHandle(write);
}
if(read)
{
cout<<"read over"<<endl;
CloseHandle(read);
}
return EXIT_SUCCESS;
} //定义读操作
DWORD WINAPI Threadread(LPVOID x)
{
int j;
for(int i = ; i < ; i++)
{
for(j = ; j < ; j++)
{
WaitForSingleObject(full, INFINITE); // P(full);
WaitForSingleObject(mutex, INFINITE); // P(mutex);
cout<<"read"<<i<<":"<<"a["<<j<<"]:"<<a[j]<<endl;
ReleaseMutex(mutex); //V(mutex);
ReleaseSemaphore(empty,,NULL); //V(empty);
}
Sleep();
}
return ;
} //定义写操作
DWORD WINAPI Threadwrite(LPVOID x)
{
int j;
for(int i = ; i < ; i++)
{
for(j = ; j < ; j++)
{
WaitForSingleObject(empty, INFINITE); // P(empty);
WaitForSingleObject(mutex, INFINITE); // P(mutex);
a[j] = *i+j;
cout<<" write"<<i<<":"<<"a["<<j<<"]:"<<a[j]<<endl;
ReleaseMutex(mutex); //V(mutex);
ReleaseSemaphore(full,,NULL); //V(full);
}
Sleep();
}
return ;
}
操作系统の实验四 windows中线程的创建和同步控制的更多相关文章
- java中线程池创建的几种方式
java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize ...
- Windows中使用QEMU创建树莓派虚拟机
环境: windows 10 2018-04-18-raspbian-stretch.img 一.下载QEMU 根据你的系统情况,下载相应的版本,并安装完成 https://www.qemu.org/ ...
- 操作系统 - unix和windows下进程异同
在UNIX系统中,只有一个系统调用可以用来创建新进程:fork.这个系统调用会创建一个与调用进程相同的副本.在调用了fork之后,这两个进程(父进程和子进程)拥有相同的存储映像.同样的环境字符串和同样 ...
- Java并发编程:线程的创建
Java并发编程:线程的创建 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- windows进程/线程创建过程 --- windows操作系统学习
有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...
- Windows中的Work线程和GUI线程
Windows线程分为两种:Worker线程.GUI线程 worker线程:是指完全不牵扯到图形用户界面(GUI),纯粹做运算的线程. GUI线程:负责建造窗口以及处理消息循环(拥有消息队列).任何一 ...
- windows中的进程和线程
今天咱们就聊聊windows中的进程和线程 2016-09-30 在讨论windows下的进程和线程时,我们先回顾下通用操作系统的进程和线程.之所以称之为通用是因为一贯的本科或者其他教材都是这么说的: ...
- 操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁
并发编程前言: 1.网络应用 1)爬虫 直接应用并发编程: 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2.运维领域 1)自动 ...
- ucore操作系统学习(四) ucore lab4内核线程管理
1. ucore lab4介绍 什么是进程? 现代操作系统为了满足人们对于多道编程的需求,希望在计算机系统上能并发的同时运行多个程序,且彼此间互相不干扰.当一个程序受制于等待I/O完成等事件时,可以让 ...
随机推荐
- pageresponse.min.js自动缩放页面改写
/* * 名称 :移动端响应式框架 * 作者 :白树 http://peunzhang.cnblogs.com * 版本 :v2.1 * 日期 :2015.10.13 * 兼容 :ios 5+.and ...
- TCP三次握手--syn攻击
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- MySQL插入更新_ON DUPLICATE KEY UPDATE
前提:操作的表具有主键或唯一索引 INSERT INTO:表中不存在对应的记录,则插入:若存在对应的记录,则报错: INSERT INTO IGNORE:表中不存在对应的记录,则插入:若存在对应的记录 ...
- Docker Macvlan 介绍 or 工作原理
Docker Macvlan Network Macvlan Network:属于Docker的网络驱动. Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识 ...
- bool的值分别为0,1;那哪个代表true哪个代表false?
0为false,1为true. bool表示布尔型变量,也就是逻辑型变量的定义符,以英国数学家.布尔代数的奠基人乔治·布尔(George Boole)命名. 布尔型变量bool的取值只有false和t ...
- 一道简单树形dp
题意:给定一棵树,从中选出一些节点,使得不成父子关系的节点对数最多.问这个最大值是多少. 思路:首先既然是给定一颗树,先要选择合适的数据结构,来保存这颗树.由于这颗树只关心根节点在哪里,所以只需要用一 ...
- Bootstrap3基础 text-right/left/center 设置标题右对齐、左对齐、居中
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- Python3 tkinter基础 Menu add_radiobutton 单选的下拉菜单
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- ArchLinux 无密码Samba 配置
安装上迅雷后就必须把硬盘挂上去开个Samba,然后边下电影边看,这就是一个Nas了. 开搞! pacman -S samba 安装samba,然后进入/etc/samba/目录 vim smb.con ...
- Linux 修改SWAP分区后导致开机问题
Linux 系统出现提示原因 扩容后,修改了SWAP,或者安装了双 Linux 系统,在安装后一种 Linux 系统时把 SWAP分区 重新格式化,导致UUID 改变,所以启动时无法加载原来对应UUI ...