线程并发拷贝程序实验报告及实验结果(共8页).doc
《线程并发拷贝程序实验报告及实验结果(共8页).doc》由会员分享,可在线阅读,更多相关《线程并发拷贝程序实验报告及实验结果(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上附录一 程序代码#include#include#include#include#include#include#define PSIZE 4096 /*管道文件的大小*/#define BSIZE 128 /*默认缓冲区的大小*/#define NOFILE 20 /*u_ofile表可分配的个数*/#define NFILE 20 /*p_file表可分配的个数*/#define NPIPE 20 /*p_fcb可分配的个数*/*进程的u_file表*/int u_ofileNOFILE;/*模拟file表*/struct char f_flag;/*读写标志,w
2、表示写,r表示读*/ int f_count;/*表示此表项的状态,=0表示此表项没被使用,可分配;=1表示此表项在被使用,不可再分配*/ int f_inode;/*对应的p_fcb表下标*/ long f_offset;/*读写指针,当前已读或已写个数*/p_fileNFILE;/*管道控制块*/struct char *p_addr;/*管道文件基地址*/ int p_size;/*管道文件大小,PSIZE*/ int p_count;/*=2表示读写都在被进行,=1表示在被读或被写,=0表示管道没被使用,可分配*/p_fcbNPIPE;/*模拟管道文件*/char *pfile;/*管
3、道的写入写出端*/int fd2;/*锁机制,实现互斥*/pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;/*进程间通信,实现同步*/pthread_cond_t rflag = PTHREAD_COND_INITIALIZER;/*读信号量*/pthread_cond_t wflag = PTHREAD_COND_INITIALIZER;/*写信号量*/*线程创建函数只能传一个参数,用结构体来封装所有参数*/struct arg_set char *fname; /*文件名*/ int f; /*传递fdp*/;/*u_ofile表初始化*/
4、int u_ofile_init() int i; for(i=0;iNOFILE;i+) u_ofilei = -1; u_ofile0=0; u_ofile1=0; u_ofile2=0; return 0;/*创建管道*/int ppipe(int a) int i; for(i=0;iNOFILE;i+) if(u_ofilei=-1) a0 = i;/*读*/ u_ofilei = 0;/*读端*/ break; for(i;i=NOFILE) printf(u_ofile分配失败n); return -2; pfile = (char *)malloc(PSIZE*sizeof(c
5、har);/*申请模拟管道用的内存空间*/ if(pfile=NULL)/*申请可能不成功*/ return -1; for(i=0;iNFILE;i+) if(p_filei.f_count!=1) p_filei.f_flag = r;/*读标志*/ /p_filei.f_inode = 0;/*读对应p_fcb表下标*/ p_filei.f_count = 1;/*p_file0这个表项在被使用,不可再分配*/ p_filei.f_offset = 0;/*读指针*/ u_ofilea0 = i;/*读端*/ break; for(i=0;i=NFILE) return -1; for(
6、i=0;i=NPIPE) return -1; return 0;/*分配成功*/*关闭管道*/int p_close(int a) char *p; int i; for(i=0;i2;i+) p=p_fcbp_fileu_ofileai.f_inode.p_addr; if(p!=NULL) free(p); /*释放管道内存*/ p_fcbp_fileu_ofileai.f_inode.p_count = 0; /*管道控制块计数清零*/ p_fileu_ofileai.f_count = 0; /*file表项计数清零*/ u_ofileai = -1; /*u_ofile表项清空*/
7、 ai = -1; /*fdp清空?/ return 0;/*写管道*/int writep(int fd,char *ca,int n) long offr,offw;/*读写指针,实际是读写字符个数*/ int r;/*管道文件读端*/ int m;/*若ca中的字符不能一次写完,m用来表示一次可写入的字符的最大数*/ int w = u_ofilefd;/*管道文件写端*/ int pf = p_filew.f_inode;/*读管道对应的p_fcb表的下标*/ int n1 = n;/*一次应该写入的字符个数*/ int wstart = 0;/*计数器,写入字符个数*/ int i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线程 并发 拷贝 程序 实验 报告 结果
限制150内