第一范文网 - 专业文章范例文档资料分享平台

系统调用中的信号量PV操作 理发师问题

来源:用户分享 时间:2025/6/6 9:02:58 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

否则只能为当前进程的所有线程共享;value给出了信号量的初始值。 (2)函数sem_post( sem_t *sem )用来增加信号量的值。

当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。

(3)函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,

解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。

2.3 伪码实现

difine n 5; //为顾客准备的椅子数为5 semaphore mutex=1; //用于互斥

semaphore customers=0;//等候理发的顾客数 semaphore barbers=1;//正在等候顾客的理发师数

int waiting=0; //等候理发的顾客数 //理发师线程 void barber() {

while(true) //判断有无顾客 {

wait(customers); //若无顾客,理发师睡眠

wait(mutex); //互斥

waiting--; //等候顾客数少一个 signal(mutex); //释放临界资源

signal(barber); //理发师去为一个顾客理发 cut_hair; //正在理发

} } //顾客线程

void customer() {

wait(mutex); // if (waiting

waiting++; // signal(mutex); //signal(customers); // wait(barber); // get_haircut; //}

else

signal(mutex); //}

}

2.4 开发环境与工具

系统平台:LINUX环境 实现语言:C语言 开发工具:NANO编辑器

互斥

如果有空椅子,则等待 等候顾客数加1

释放临界资源

如果理发师睡觉,唤醒理发师理发师在理发, 顾客等候 顾客坐下等理发师

店里人满了,顾客离开

3数据结构与模块说明

3.1 数据结构

通过分析课程设计要求,定义以下的数据: sem_t

mutex,customers,barbers;

//design

mutex,customer,barbers

int waiting=0; //the number of waiting customers int chair[5];

3.2程序模块说明 3.2.1主函数模块

主函数流程图如下:

three

semaphores:

3.2.2 理发师模块

理发师模块函数流程图如下:

3.2.3 顾客模块

顾客模块函数流程图如下:

系统调用中的信号量PV操作 理发师问题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6ulnc9nc7n8jj329nacs_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top