linux进程互斥实验思考,4-实验四_Linux进程互斥

实验四 Linux进程互斥

一、实验目的

熟悉Linux下信号量机制,能够使用信号量实现在并发进程间的互斥和同步。

二、实验题目

使用共享存储区机制,使多个并发进程分别模拟生产者-消费者模式同步关系、临界资源的互斥访问关系,使用信号量机制实现相应的同步和互斥。

三、背景材料

(一)需要用到的系统调用

实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man 2 系统调用名”或者“man 3 函数名”命令获取。

fork() 创建一个子进程,通过返回值区分是在父进程还是子进程中执行; wait() 等待子进程执行完成;

shmget() 建立一个共享存储区; shmctl() 操纵一个共享存储区;

shmat() 把一个共享存储区附接到进程内存空间;

shmdt() 把一个已经附接的共享存储区从进程内存空间断开;

semget() 建立一个信号量集;

semctl() 操纵一个信号量集,包括赋初值;

semop() 对信号量集进行wait和signal操作; signal() 设置对信号的处理方式或处理过程。

(二)模拟生产者-消费者的示例程序

本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享存储区内容时显示其数值。各客户进程作为生产者,如果共享存储区内容已经显示(被消费),可以接收用户从键盘输入的整数,放在共享存储区。

编译后执行,第一个进程实例将作为服务进程,提示:

ACT CONSUMER!!! To end, try Ctrl+C or use kill.

服务进程一直循环执行,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。 其他进程实例作为客户进程,提示:

Act as producer. To end, input 0 when prompted.

客户进程一直循环执行,直到用户输入0。

示例程序代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值