实验四 Linux进程互斥_第1页
实验四 Linux进程互斥_第2页
实验四 Linux进程互斥_第3页
实验四 Linux进程互斥_第4页
实验四 Linux进程互斥_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四Linux进程互斥一、实验目的熟悉Linux下信号量机制,能够使用信号量实现在并发进程间的互斥和同步。二、实验题目使用共享存储区机制,使多个并发进程分别模拟生产者一消费者模式同步关系、临界资 源的互斥访问关系,使用信号量机制实现相应的同步和互斥。三、背景材料(一)需要用到的系统调用实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man 2系统调用名”或者“man 3函数名”命令获取。fork()创建一个子进程,通过返回值区分是在父进程还是子进程中执行;wait()等待子进程执行完成;shmget()建立一个共享存储区;shmctl()操纵一个共享存储区;shma

2、t()把一个共享存储区附接到进程内存空间;shmdt()把一个已经附接的共享存储区从进程内存空间断开;semget()建立一个信号量集;semctl()操纵一个信号量集,包括赋初值;semop()对信号量集进行wait和signal操作;signal()设置对信号的处理方式或处理过程。(二)模拟生产者一消费者的示例程序本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。 进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享 存储区内容时显示其数值。各客户进程作为生产者,如果共享存储区内容已经显示(被消费), 可以接收用户从键盘输入的整数,放在

3、共享存储区。编译后执行,第一个进程实例将作为服务进程,提示: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 / need to change/ n

4、eed to change#define MY_SHMKEY 10071500#define MY_SEMKEY 10071500 void sigend(int);int shmid, semid;int main(void)int *shmptr, semval, local;struct sembuf semopbuf;/*这个函数成功时返回共享内存的ID,失败时返回-1。*/if(shmid=shmget(MY_SHMKEY sizeof(int), IPC_CREAT|IPC_EXCL|0666) ,” 在命令提示下可以使用的命令包括:help显示可用命令list列出所有已分配块号g

5、et分配一个新块rel释放最后分配块号 end退出程序 示例程序的代码如下: #include #include #include #include #include #include #include #define MY_SHMKEY 10071800/ need to change#define MAX_BLOCK 1024 #define MAX_CMD 8struct shmbuf (int top;int stackMAX_BLOCK; *shmptr, local;char cmdbufMAX_CMD; int shmid, semid;void sigend(int);void

6、 relblock(void);int getblock(void);void showhelp(void);void showlist(void);void getcmdline(void);int main(void) if(shmid=shmget(MY_SHMKEYsizeof(structshmbuf),IPC_CREAT|IPC_EXCL|0666) top=MAX_BLOCK-1;for(i=0; istacki=MAX_BLOCK-i;sleep(1000000);/* cause sleep forever. */void sigend(int sig)shmctl(shmi

7、d, IPC_RMID, 0);semctl(semid, IPC_RMID, 0);exit(0);void relblock(void)if(local.toptop+;shmptr-stackshmptr-top=local.stacklocal.top-;int getblock(void)if(shmptr-topstackshmptr-top;shmptr-top-;void showhelp(void)printf(navailable COMMAND:nn);printf(helptlist this helpn);printf(listtlist all gotten blo

8、ck numbern);printf(gettget a new blockn);printf(reltrelease the last gotten blockn);printf(endtexit this programn);void showlist(void)int i;printf(List all gotten block number:n);for(i=0; i );fgets(cmdbuf, MAX_CMD-1, stdin);四、实验内容本实验要求内容如下:1、模拟生产者一消费者实现相应的示例程序功能,记录执行结果;改造该程序,取消所有的同步机制,记录执 行结果,看是否能观察到程序出现错误情况;进一步改造程序,使错误情况易于观察到;记 录执行情况并进行分析。2、模拟临界资源访问实现相应的示例程序功能,记录执行结果,看是否能观察到程序出现错误情况;改造该 程序,使错误情况易于观察到,记录执行情况并进行分析;利用信号量机制实现进程互斥功 能,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论