linux采用多线程互斥与同步机制,实现读者,写者问题,题目2用管程机制实现读者-写者问题.ppt...

互斥与同步

操作系统实验2

赵静:1215052241@

内容

一、信号量机制解决互斥与同步问题

实验:P/V信号量的编程实现

二、管程机制解决互斥与同步问题

实验:管程机制的编程实现

一、信号量机制解决互斥与同步问题

信号量机制

信号量(semaphore)机制

解决并发进程同步的工具

P操作表示同步进程发出的检测信号量操作,检测是否能够使用临界资源

V操作表示访问完临界资源的进程通知等待进程已经完成了临界资源的访问,将临界资源释放。

经典互斥与同步问题回顾

生产者-消费者问题

读者-写者问题

哲学家进餐问题

生产者-消费者问题

生产者P:

Wait(empty);

Wait(mutex);

Buffer(in)=nextp;

in:=(in+1) mod n;

Signal(mutex);

Signal(full);

消费者C:

Wait(full);

Wait(mutex);

netxc=buffer(out);

out:=(out+1) mod n;

Signal(mutex);

Signal(empty);

mutex,full,empty:semaphore

mutex :=1;

full:=0;

empty:=n;

读者-写者问题(读者优先)

读者R:

Wait(rmutex);

rcount++;

if(rcount == 1)

Wait(wmutex);

Signal(rmutex);

Read_Action();

Wait(rmutex);

rcount--;

if(rcount == 0)

Signal(wmutex);

Signal(rmutex);

写者W:

Wait(wmutex);

Write_Action();

Signal(wmutex);

rmutex,wmutex:semaphore

rmutex :=1;wmutex :=1;

rcount:int

rcount:=0;

哲学家进餐问题

哲学家i(i=0,1..5)

thinking();

Wait(fork[i]);

Wait(fork[(i+1) mod 5])

eating();

Signal(fork[i]);

Signal(fork[(i+1) mod 5])

array of fork[]:semaphore

fork[] :={1,1,1,1,1};

思考,怎么解决

死锁问题 ?

同步对象

同步对象是指Windows/Linux中用于实现同步与互斥的实体,

包括互斥量(Mutex)、信号量(Semaphore)、临界区(Critical

Section)和事件(Events)等。

本实验中使用到信号量、互斥量和临界区三个同步对象。

实验方案设计

以读者-写者(读者优先)为例:

1.创建若干线程分别模拟读者操作和写者操作

2.读线程间和写线程间对各自局部共享资源的访问修改采用 Mutex对象,结合WaitForSingleObject 保证互斥操作。

3.读线程与写线程争用全局临界资源采用临界区(Critical Seciton)。

4.统管读写线程的线程采用WaitForMultipleObjects 保证等待所有的线程结束。

创建线程函数

CreateThread

功能:该函数创建一个在调用进程的地址空间中执行的线程。

若函数调用成功,返回值为新线程的句柄;若函数调用失败,

返回值为NULL。

格式:

HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,

DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParameter, DWORD dwCreationFlag,

LPDWORD lpThreadId);

参数说明:

lpThreadAttributes—指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。

dwStackSize—定义原始堆栈大小。

lpStartAddress—指向使用LPTHRAED_START_ROUTINE类型定义的函数。

lpParamiter—定义一个给进程传递参数的指针。

dwCreationFlags—定义控制线程创建的附加标志。

lpThread—保存线程标志符(32位)

退出线程函数

ExitThread

功能:该函数结束一个线程

格式:VOID ExitThread (DWORD dwExitCode);

参数说明:

dwExitCode—调用线程的退出代码

创建互斥量函数

CreateMutex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值