网站大量收购闲置独家精品文档,联系QQ:2885784924

进程同步与互斥.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

**进程同步与互斥01Linux提供下列3个有关信号量的系统调用函数:02semget()03semop()04semctl()05下面分别予以介绍。1创建一个新的信号量集或获取一个已经存在的信号量集2命令格式:3intsemget(key_tkey,intnsems,intsemflg);4返回值:5正确返回:信号量集的标识符6错误返回:-11.创建一个新的信号量集或获取一个已经存在的信号量集参数说明:key——信号量集的key值:①.使用IPC_PRIVATE,由系统产生key值并返回标识符,或者返回key值已存在的信号量集的标识符。②.key值不为IPC_PRIVATE而是由用户指定一个非0整型数值,则对信号量集的打开或存取操作依赖于semflag参数的取值。nsems——指定打开或者新创建的信号量集将包含的信号量的数目;如果该key值的信号量集已存在,而semflg只指定了IPC_CREAT标志,那么参数nsems必须与原来的值一致,否则也会返回错误信息。该参数最大值在linux/sem.h中被定义:#defineSEMMSL250/*=8000*/semflg——当key值不为IPC_PRIVATE:①.若只设置semflag的IPC_CREAT位,则创建一个信号量集,如果该信号量集已经存在,则返回其标识符②.若设置semflag的IPC_CREAT|IPC_EXCL位,则创建一个新的信号量集,如果该key值的信号量集已经存在则返回错误信息③.只设置IPC_EXCL位而不设置IPC_CREAT位没有任何意义。创建一个新的信号量集或获取一个已经存在的信号量集实验中,使用该调用创建一个只含一个信号量的信号量集,格式为:semid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);其中的IPC_PRIVATE可以使用具体的整型数值取代。122.对信号量的P、V操作**命令格式:intsemop(intsemid,structsembuf*sops,unsignednsops);返回值:正确返回:0错误返回:-1参数说明:semid——信号量集的标识符,由semget()得到。sops——指向一个sembuf结构数组,该数组的每个元素对应一次信号量操作。2.对信号量的P、V操作**其sembuf数据结构如下:structsembuf{ unsignedshortsem_num;/*semaphoreindexinarray*/ short sem_op; /*semaphoreoperation*/ short sem_flg; /*operationflags*/};其中的参数含义如下所示:2.对信号量的P、V操作**⑴.信号量的sem_num值标明它是信号量集的第几个元素,第一个信号量为0,第二个为1,依次类推。⑵.semop确定对sem_num指定的信号量采取何种操作,它可以为负数、正数和零。①.如果sem_op为负数:则相当于P操作,从信号量的值中减去sem_op的绝对值:??????其差如果大于0,则表示该进程可以使用临界资源进入临界区;?????其差如果小于0,在没有指定IPC_NOWAIT的情况下,该进程睡眠,并插入sem_queues等待队列尾部,直到请求的条件得到满足;如果指定了IPC_NOWAIT,则出错返回。②.如果sem_op为正数:此时相当于V操作,把它的值加到信号量中,这也意味着该进程释放资源。如果是互斥则出临界区,释放临界资源。③.如果sem_op为0:则该进程将睡眠直到信号量的值也为0。系统会按顺序检查信号量等待队列(sem_pending)中的每一个成员,查看在当前信号量的状态下,其请求的操作是否可以成功,如果可以,则将它从等待队列中唤醒,并插入到就绪队列中等待调度运行。⑶.sem_flg指明操作的执行模式,它有两个标志位:IPC_NOWAIT:指明以非阻塞方式操作信号量。SEM_UNDO:指明内核为信号量操作保留恢复值nsops——是第二个参数所指向的sembuf结构数组中元素的个数,如果只有一个信号量nsops值为1。2.对信号量的P、V操作在实验中,使用该系统调用实现P、V操作,使用格式为:**01structsembufP,V;03semop(semid,V,1); //对信号量semid执行V操作02semop(semid,P,1); //对信号量s

文档评论(0)

135****2083 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档