- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验、进(线)程同步与通信
实验、进(线)程同步与通信 一、实验目的 1、掌握Linux系统用户界面中键盘命令的使用。 2、学会一种Linux下的编程环境。 3、掌握Linux下进(线)程的概念。 4、了解Linux进程同步与通信的主要机制,并通过信号灯操作实现进程间的同步与互斥。 二、预备知识 1、Linux下的信号灯及其P、V操作。 在Linux中信号灯是一个数据集合(信号量数组),可以单独使用这一集合的每个元素。 有关的系统调用命令: 1)semget:返回一个被内核指定的整型的信号灯索引。 2)semop:执行对信号灯集的操作。 3)semctl:执行对信号灯集的控制操作。 信号灯的定义: 数据结构的原型是semid_ds,在linux/sem.h中定义:struct semid_ds{ struct ipc_perm sem_perm; /*permissions..seeipc.h*/ time_t sem_otime; /*last semop time*/ time_t sem_ctime; /*last change time*/ struct sem *sem_base;/*ptr to first semaphore in array*/ struct wait_queue *eventn; struct wait_queue *eventz; struct sem_undo *undo; /*undo requests on this array*/ ushort sem_nsems; /*no. of semaphores in array*/}; 信号量的创建: 使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集. 原型:int semget(key_t key, int nsems, int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1. key:通过相同的key值调用semget semflg:标记集合,类似open函数的标记。 一般用:IPC_CREAT | 0666 nsems:信号灯的个数 信号量的操作: 系统调用semop();调用原型:int semop(int semid,struct sembuf *sops,unsigned nsops);返回值:0—成功。-1—失败 semid:semget函数返回的信号量标识符 sops:指向结构数组的指针: struct sembuf{ ushort sem_num;/*将要处理的信号量的下标*/ short sem_op; /*要执行的操作*/ short sem_flg; /*操作标志,IPC_NOWAIT */ } nsops:操作次数,一般为1 P操作 void P(int semid,int index) { struct sembuf sem; sem.sem_num = index; sem.sem_op = -1; sem.sem_flg = 0; //操作标记:0或IPC_NOWAIT等 semop(semid,sem,1); //1:表示执行命令的个数 return; } V操作 void V(int semid,int index) { struct sembuf sem; sem.sem_num = index; sem.sem_op = 1; sem.sem_flg = 0; semop(semid,sem,1); return; } 信号量的赋值:系统调用semctl()原型:int semctl(int semid,int semnum,int cmd,union semun arg);返回值:如果成功,则为一个正数。 semnum:信号量数组下标,即要控制的第几个信号量 cmd:要执行的动作 ·IPC_RMID将信号量集从内存中删除(不用时删除)。?·SETALL设置信号量集中的所有的信号量的值。?·SETVAL设置信号量集中的一个单独的信号量的值(第四个参数指定)。arg.val=1; semctl(semid,1,SETVAL,arg) 2、线程 1)线程创建 pthread_create(pthread_t *thread, pthread_attr_t *
您可能关注的文档
- 学校法规制修与实作.ppt
- 学校发展规划研修-教育部全国中小学教师继续教育网.ppt
- 学校食堂食品安全卫生要求-漳浦县教育局.ppt
- 学校文化建设-徐州市第二中学.ppt
- 学案教学的原理与方法.ppt
- 学位论文选题.ppt
- 学生就学贷款.doc
- 学生学籍变动与毕业注册流程-中国科学院广州地球化学研究所.ppt
- 学生就学贷款Q&A.doc
- 学生就学贷款申请须知.doc
- 西方国家教育制度.pptx
- 辅警行为规范解读.pptx
- 躺平式干部自查整改措施.pptx
- 小学生宪法教育课.pptx
- 2024—2025学年度广东省茂名市第一次校际考试高二下学期3月月考历史试题(含答案).docx
- 2024-2025学年七年级下学期道德与法治期中模拟试卷(二)(统编版2024新教材含答案解析).docx
- 2024—2025学年度山西省怀仁市大地学校高二下学期第二次月考历史试题(含答案).docx
- 2024-2025学年八年级下学期道德与法治期中模拟试卷(二)(统编版含答案解析).docx
- 2024-2025学年八年级第二学期英语期中模拟试卷(三)(译林版含答案解析).docx
- 2025届甘肃省平凉市第一中学等校高三下学期4月月考历史试题(含答案).docx
文档评论(0)