计算机操作系统-进程间互斥与同步_第1页
计算机操作系统-进程间互斥与同步_第2页
计算机操作系统-进程间互斥与同步_第3页
计算机操作系统-进程间互斥与同步_第4页
计算机操作系统-进程间互斥与同步_第5页
全文预览已结束

下载本文档

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

文档简介

1、进程间互斥与同步实验内容:编写算法,实现进程间对临界资源的互斥访问以及进程间的同步关系。实验要求:1、要求进程互斥使用文本文件;2、假定文本文件txtl最大可写入30个字符;3、写满后复制进程将文本文件的内容复制到另一个文 本文件txt2中(无长度限制)。4、复制进程复制完毕写入进程可再重新写入,重复执行3, 4,直到给由停止命令。5、实现进程间的同步和互斥。代码:#include#include/stdio.h#include/函数库#include/linux/unix 的系统调用#include/信号量#includeusing namespace std ;typedef union

2、_semnuint val;structsemid_ds *buf;ushort * array ;semun;/v操作void v( int &sem_id)structsembuf sem_b;sem_b.sem_num= 0;sem_b.sem_op= 1;sem_b.sem_flg=SEM_UNDO;if (semop(sem_id,&sem_b, 1 )=- 1) cout error endl;exit (0);/p操作void p( int &sem_id)struct sembuf sem_b;sem_b.sem_num=0;sem_b.sem_op=-1;sem_b.sem_

3、flg=SEM_UNDO;if (semop(sem_id,&sem_b, 1 )=- 1) cout error endl;exit (0);/设置信号量初值void set ( int sem_id, int val= 1)semun sem_un;sem_un.val=val;if (semctl(sem_id, 0,SETVAL,sem_un)=- 1) if (errno=EEXIST)cout exist endl;cout set val error endl;exit ( 0 );void del( int sem_id)semun sem_un;if (semctl(sem_

4、id, 0,IPC_RMID,sem_un)=- 1) cout error endl;int main()/互斥量int sem_mutex=semget(key_t) set (sem_mutexk, 1);8888 , 1 ,IPC_CREAT);int sem_full=semget(key_t)1234 , 1,IPC_CREAT);cout sem_fullendl;/set semaphore fullset (sem_full, 0);int sem_empty=semget(key_t)1235 , 1 ,IPC_CREAT);cout sem_empty 0) /paren

5、t/produce/p(empty)/v(full)for ( int i= 0;i 5;i+)p(sem_empty);p(sem_mutex);/锁定临界区cout writing.iendl;fseek(fp1,0,SEEK_SET);,fp1);fputs ( QWERTYUIOPASDFGHJKLZXCVBNM1234” fflush(fp1);sleep(1 );cout write done endl;v(sem_mutex);v(sem_full);fclose(fp1);cout txt2: endl;system( cat txt2 n); else if (id= 0)/

6、consume/p(full)/v(empty)char buf 32 ;buf 31 = 0;fill(buf,buf+20, 0);for ( int i= 0;i 5;i+) ( p(sem_full);p(sem_mutex);/锁定临界区cout reading. iendl;fseek(fp2,0,SEEK_SET);fgets(buf,30 ,fp2);fputs (buf,fp3);fflush(fp3);/由于缓冲方式的影响,30个字符不会立刻读取到buf中,需要fflush cout bufendl; cout read done endl; cout endl;sleep

7、(1);v(sem_mutex);v(sem_empty);fclose(fp2);fclose(fp3); exit (0); else /error (cout 创建子进程失败! endl; exit (0);/ del(sem_full);/ del(sem_empty);return 0;输生结果:/注意要以root用户运行程序196608229377writing.0write donereading.0QWERTYUIOPASDFGHJKLZXCVBNM123read done TOC o 1-5 h z writing.1write done reading.1QWERTYUIOPASDFGHJKLZXCVBNM123 read donewriting.2write donereading.2QWERTYUIOPASDFGHJKLZXCVBNM123 read donewriting.3write donerea

温馨提示

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

评论

0/150

提交评论