《操作系统》课程设计。
专业: 计算机科学与技术
班级: 题目名称: 信号量的操作
完成日期: 2024年12月22日
目录。第一章概述 2
1.实验目的 2
2、开发平台及实验环境: 3
3、实验要求 3
第二章设计需求 3
1.信号量的概念 3
2.信号量的分类 4
3.信号量于pv操作的关系 4
第三章实例分析 5
1.设计思想 5
3.运行结果截图 10
4.总结 11
参考文献 12
第一章概述。
1.实验目的。
了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。
2、开发平台及实验环境:
系统平台:windows环境。
实现语言:c++语言。
开发工具:microsoft visual c++ 6.0
3、实验要求。
利用createsemaphore、waitforsingleobject等函数检测内核同步对象的状态。
第二章设计需求。
1.信号量的概念。
信号量(semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键**段不被并发调用。在进入一个关键**段之前,线程必须获取一个信号量;一旦该关键**段完成了,那么该线程必须释放信号量。其它想进入该关键**段的线程必须等待直到第一个线程释放信号量。
为了完成这个过程,需要创建一个信号量vi,然后将acquire semaphore vi以及release semaphore vi分别放置在每个关键**段的首末端。确认这些信号量vi引用的是初始创建的信号量。
2.信号量的分类。
信号量按其用途分为两种:
1)公用信号量:初值常常为1,用来实现进程间的互斥。相关进程均可对其执行p、v操作。
2) 私有信号量:初值常常为可用资源数,多用来实现进程同步。拥有该信号量的一类进程可以对其执行p操作,而另一类进程可以对其执行v操作,多用于并发进程的同步。
信号量按照取值可以分为两种:
1) 二元信号量: 仅允许取0和1,主要用于解决进程互斥;
2) 一般信号量(计数信号量):允许取任意整数值,主要用于解决进程同步问题。
3.信号量于pv操作的关系。
p 操作。信号量的值减一。
如果满足if条件,执行了p操作的进程会挂起,p操作语句之后的语句都不会再执行。
被挂起的进程,除非另一个进程调用v()来唤醒它,否则永远不会执行。
v 操作。信号量的值加一。
如果满足if条件,执行v操作的进程会去唤醒另一个正在等待的进程(被挂起的进程)。
执行v操作的进程不会自愿停止, v操作后面的语句会接着执行。
被唤醒的进程只是进入了就绪队列,并不一定有机会马上被执行。
被唤醒的进程,从挂起点接着执行,也就是p操作之后的语句。
第三章实例分析。
1.设计思想。
假设某个饭店有一公共厕所,但是不分男女,老板规定,当有男生上厕所时,其他男生可以进去,女生不能进入,有女生先进去的时候其他女生可以进去,男生不能进入。
2. 程序**。
#include <>
#include <>
#define threadcount 40
handle ghevent;
int icurrentboy = 0;
int icurrentgirl = 0;
dword winapi boywerewcing( lpvoid );
dword winapi girlwerewcing( lpvoid );
void main()
handle athread[threadcount];
dword threadid;
int i;
// create a mutex with no initial owner
ghevent = createevent(
nulldefault security attributes
falsebe manual reset
trueinitially not owned
nullunnamed mutex
if (ghevent ==null)
// create worker threads
for( i=0; i < threadcount; i+=2 )
athread[i+1] =createthread(
nulldefault security attributes
0default stack size
lpthread_start_routine) girlwerewcing,
nullno thread function arguments
0default creation flags
threadid); receive thread identifier
if( athread[i+1] =null )
// wait for all threads to terminate
waitformultipleobjects(threadcount, athread, true, infinite);
// close thread and mutex handles
for( i=0; i < threadcount; i++
closehandle(athread[i]);
closehandle(ghevent);
dword winapi boywerewcing( lpvoid lpparam )
dword dwwaitresult;
if( icurrentboy ==0 )
elseswitch (dwwaitresult)
the thread got ownership of the mutex
case wait_object_0:
try {
todo: was bathing
printf("boy were wcing...n");
icurrentboy--;
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....