wed

实验二线程的实现和线程间的同步与互斥
一、目的:
1、了解在WINDOWS中线程的编程实现,掌握利用VC或DELPHI调用WINDOWS API建立线程。
2、了解在WINDOWS中线程间同步与互斥的信号量的实现,并利用该原理实现在WINDOWS下模拟实现有关经典线程同步与互斥问题。
二、内容:
1、利用VC或DELPHI在实际程序中实现线程。
2、利用VC或DELPHI实现线程的同步模拟。主要模拟以下问题(经营者和消费者、阅读者和写入者)。
三、实验要求:
实验内容中的第1小题为必作内容,第2小题可选择其一。
四、实验提示:
1、在Windows中调用API函数。
对于VC,在程序头文件应包括#include <windows.h>语句。
对于DELPHI,在程序前的USES中应包括Windows。
2、Windows系统中的线程及有关的系统调用。
Windows中的线程是内核线程,是系统的主要调度单位,提供了一系列的系统调用。CreateThread完成线程的创建,TerminateThread用于结束当前线程。SuspendThread可挂起指定的线程。ResumeThread可激活指定的线程。对于Windows来说,是用挂起计数来进行线程挂起和激活的计数的。每调用挂起一次,计数加1,反之则减1。当计数为0时,线程恢复运行。四个调用的原型及简单说明如下。
(1)、CreateThread创建线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //指向安全属性结构的指针,一般为NULL。
DWORD dwStackSize, // 初始化线程的堆栈尺寸,一般为0。
LPTHREAD_START_ROUTINE lpStartAddress, // 指向线程执行体的指针。
LPVOID lpParameter, // 新线程的参数
DWORD dwCreationFlags, // 建立标志位,0:创建后立即执行,1:创建后挂起。
LPDWORD lpThreadId // 指向返回标识符的指针。
)
(2)、SuspendThread挂起指定的线程
DWORD SuspendThread(
HANDLE hThread // 线程句柄
)
(3)、ResumeThread激活指定的线程
DWORD ResumeThread(
HANDLE hThread // 线程句柄
)
(4)、TerminateThread结束线程
BOOL TerminateThread(
HANDLE hThread, // 线程句柄
DWORD dwExitCode // 线程的结束代码。一般为0。
)
3、Windows中的同步机制及相关调用。
在Windows中提供了互斥对象、信号量对象和事件对象三种同步对象和相应的系统调用,用于进程和线程的同步。另外还提供了临界区(Critical Section)对象和互斥变量访问API等。在这里,我们主要对互斥对象和信号量对象进行简单介绍。
互斥对象(Mutex)为互斥信号量,它的相关API为:Createmutex创建一个互斥信号量,Openmutex打开一个互斥信号量,Releasemutex释放一个互斥信号量,使之可用,相当于Signal操作。
信号量对象(Semaphore)为资源信号量,它的相关API为:CreateSemaphore创建一个信号量对象,OpenSemaphore打开一个信号量对象,ReleaseSemaphore释放一个信号对象。
系统中统一的等待操作WaitForSingleObject,相当于Wait操作。
七个调用的原型和简单说明如下:
(1)、Createmutex创建互斥信号量
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针,一般为NULL
BOOL bInitialOwner, // 初始化时所有权的标志位,TRUE:创建时即拥有,FALSE:创建时不拥有。
LPCTSTR lpName // 互斥信号量的名称
)
(2)、Openmutex打开互斥信号量
HANDLE OpenMutex(
DWORD dwDesiredAccess, // 操作标志位,一般为MUTEX_ALL_ACCESS
BOOL bInheritHandle, // 继承标志位,一般为FALSE
LPCTSTR lpName // 互斥信号量的名称
)
(3)、Releasemutex释放互斥信号量
BOOL ReleaseMutex(
HANDLE hMutex // 互斥信号量的句柄
)
(4)、CreateSemaphore创建信号量对象
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 指向安全属性的指针,一般为NULL。
LONG lInitialCount, // 信号量的初始化值。
LONG lMaximumCount, // 信号量的最大值
LPCTSTR lpName // 信号量名称
)
(5)、OpenSemaphore打开一个信号量对象
HANDLE OpenSemaphore(
DWORD dwDesiredAccess, //操作标志位,一般为SEMAPHORE_ALL_ACCESS
BOOL bInheritHandle, //继承标志位,一般为FALSE
LPCTSTR lpName // 信号量对象名称
)
(6)、ReleaseSemaphore释放信号对象
BOOL ReleaseSemaphore(
HANDLE hSemaphore, // 信号对象句柄
LONG lReleaseCount, //释放的个数
LPLONG lpPreviousCount // 前一个计数的地址,一般为NULL
)
(7)、WaitForSingleObject等待操作
DWORD WaitForSingleObject(
HANDLE hHandle, // 等待的信号量的句柄
DWORD dwMilliseconds // 等待的时间,以毫秒为单位,如果永久等待,则为INFINITE
)
5、生产者和消费者、读者和写者问题模拟的说明。
生产者和消费者问题,缓冲区可以用一简单计数Count来描述,例如生产者生产了5个产品,可用Count=Count+5来描述。开始时可以用1个生产者线程和一个消费者线程。调试通过后可用多个线程。
读者和写者问题,读写过程可用输出语句来描述。

时间: 2024-11-09 04:53:29

wed的相关文章

resin WED服务器初用遇到的问题和解决方法 java.lang.RuntimeException: java.net.SocketException: Unrecognized Windows Socke ts error: 0: JVM_Bind

开启resin 服务器以后提示如下:(控制台不断的循环循环打印如下错误提示) java.lang.RuntimeException: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind at com.caucho.server.cluster.Server.start(Server.java:1191) at com.caucho.server.cluster.Cluster.startServer(

2016年5月5日 Wed第一章

什么是HTTP:http是一种超文本传送协议. HTTP定义事务处理一下四步: 1.客户和Wed服务建立连接 2.客户发送HTTP请求 3.服务器端接受HTTP的请求 4.服务器端关闭连接,客服端解析会发相应,回复页面 发送请求信息四步: 1.请求行{掌握四个HTTP请求 get(检索资源) post put delete}{got 不安全,速度快,没有封装|post 安全,速度慢,封装} 2.请求头 3.空行 4.消息体 幂等:无论操作多少次都没有变化:get post delete 不幂等:

HTML5 — Wed Storage简单示例

一.Wed Storage 概述 Wed Storage功能:在Wed上储存数据的功能,这里的储存是针对客户端本地而言的. 具体分为两种: sessionStorage,将数据保存在session对象中.session是指用户在浏览某网站时,从进入网站到浏览器关闭所经过的这段时间,也是用户浏览这个网站所花费的时间.session对象可以用来保存在这段时间内所要求保存的如何数据. localStorage,将数据保存在客户端本地的硬件设备(硬盘)中,即使浏览器被关闭了,该数据仍然存在,下次打开浏览

学习笔记-初识wed项目

程序构架的分类: 1.c/s架构(client/server) 即客户端/服务器工作模式.由服务器提供服务,客户端来使用服务的,用户需安装客户端程序. 2.b/s架构(browser/server) 浏览器/服务器工作模式,又称请求响应模式.浏览代替客户端,只需连接网络打开浏览器即可使用服务器提供的服务. b/s架构的工作原理: 1.客户端(浏览器)接受用户的输入 2.客户端向应用服务器端发送请求,等待服务器端响应. 3.服务器端程序进行数据处理:通常使用服务器端技术,如jsp等,对请求进行数据

用C++编一程序,先输出一行sun mon tue wed thu fri fri,接着使用右对齐打印出日期,像日历那样

先输出一行sun mon tue wed thu fri fri,再提醒用户输入一个起始日期和终止日期,然后输出结果. #include<iostream> #include<iomanip> //要设置域宽,使用setw函数,所以要使用iomanip头文件 using namespace std; int main(){ int day, stop, i, j, tian; cout << "Enter the number of day and stop:

Linux Apache wed服务器

http服务软件及企业实战 主流web软件 当前互联网主流的wed服务说明 apache nginx (nginx.org) resin tomcat php (http://php.net/downloads.php) linux系统软件包安装方式 apache介绍 特点及应用场合 apache 安装软件 [[email protected] ~]# rpm -qa httpd         =è查看软件 httpd-2.2.15-53.el6.centos.x86_64 [[email p

Linux Apache Wed

http服务软件及企业实战 主流web软件 当前互联网主流的wed服务说明 apache nginx (nginx.org) resin tomcat php (http://php.net/downloads.php) linux系统软件包安装方式 apache介绍 特点及应用场合 apache 安装软件 [[email protected] ~]# rpm -qa httpd         =è查看软件 httpd-2.2.15-53.el6.centos.x86_64 [[email p

JS 把 Wed Jul 15 2015 00:00:00 GMT+0800 转换成2015-07-15

function strlen(str) { var len = 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); //单字节加1 if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) { len++; } else { len += 2; } } return len; } fu

Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server&#39;s identity verification is not recommended.

报错:Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option

第七篇:wed版语音机器人

wed版语音机器人: GitHub项目地址:https://github.com/Yang915/WebToy 特别说明:该项目在本机测试,通过浏览器调用系统麦克风(https请求),实际环境在Firefox进行测试,其他浏览器不确保正常运行!!! 项目目录说明: 项目主程序:main.py 1 import os 2 from flask import Flask, render_template, request 3 4 from BP_get_answer import app_get_a