进程间同步和通信内容摘要:

ime成员。  IPC_RMID:删除消息队列 Embedded Operating Systems 18 信号量  Semphore,用来对资源进行并发控制访问  通常是一个计数器  如果资源可用,值 0  如果不可用,值 =0  当进程需要访问资源,但资源不可用时,将计数值 1,并阻塞  当进程释放资源,使得资源有资源可用时,就唤醒被阻塞的进程 Embedded Operating Systems 19  获得信号量集描述符  semop用来获取或释放信号量对应的资源 Embedded Operating Systems 20 对 semop中 sembuf结构的解释  sembuf中包含下列几个分量: unsigned short sem_num。 //要操作的信号量的序号 short sem_op。 //要进行的操作 short sem_flg。 //与操作相关的一些标记  其中, sem_flg可以是  IPC_NOWAIT:当期望的操作无法完成时,直接返回  和 SEM_UNDO:自动释放标记  sem_op的值确定要进行的操作  0:释放资源  =0: waitforzero  0:申请资源 Embedded Operating Systems 21  Semctl对信号量进行控制,可以用来删除一个信号量  第 4个参数可选,是一个 union,其含义根据cmd进行解释 union semun { int val。 struct semid_ds *buf。 unsigned short * array。 struct seminfo *__buf。 } Embedded Operating Systems 22 对 semctl中 cmd等的解释 cmd可以是:  IPC_STAT,将信号量集的信息复制到第四个参 数所提示的空间中,此时第四个参数为: struct semid_ds *buf。 此时第二个参数无用  IPC_SET,与上一个操作相反  IPC_RMID,删除信号量集,不使用第四个参数  GETALL/SETALL,使用第四个参数: unsigned short* array,获取 /设置所有信号量的值  GETVAL/SETVAL,前者使用第 4个参数: int val,获得 /设置指定信号量的值  GETNCNT、 GETPID、 GETZCNT Embedded Operating Systems 23 Cmd使用举例  union semun args。  =1。  semctl(sem_id,sem_no,SETVAL,args)。  int i=semctl(sem_id,sem_no,GETVAL)。  semctl(sem_id,sem_no,IPC_RMID)。 Embedded Operating Systems 24 使用信号量互斥   注意:示例。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。