首页 > 学院 > 开发设计 > 正文

Linux信号量的SEM_UNDO标志

2019-11-08 18:25:57
字体:
来源:转载
供稿:网友
信号量通过控制其他通信资源来实现进程间通信,在此过程中负责数据的互斥、同步等功能,主要函数semget,semop,semctl。semop函数主要功能为对信号量进行P/V操作。函数原型为:int semop(int semid,struct sembuf* sops,unsigned nsops);sembuf结构如下图:semop操作的sembuf结构的sem_flg成员ipC_NOWAIT和SEM_UNDO。       1.sem_flg公认的标志是 IPC_NOWAIT 和 SEM_UNDO。如果操作指定SEM_UNDO,它将会自动撤消该进程终止时。在标准操作程序中的操作是在数组的顺序执行、原子的,那就是,该操作要么作为一个完整的单元,要么不。如果不是所有操作都可以立即执行的系统调用的行为取决于在个人sem_flg领域的IPC_NOWAIT标志的存在。       2.sembuf结构的sem_flg成员为SEM_UNDO时,它将使操作系统跟踪当前进程对这个信号量的修改情况,如果这个进程在没有释放该信号量的情况下终止,操作系统将自动释放该进程持有的信号量.       3.只有将 sem_flg 指定为 SEM_UNDO 标志后,semadj (所指定信号量针对调用进程的调整值)才会新.此外,如果此操作指定SEM_UNDO,系统更新过程中会撤消此信号灯的计数(semadj)。此操作可以随时进行,它永远不会强制等待的过程。调用进程必须有改变信号量集的权限。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表