首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SysV信号量删除

SysV信号量删除
EN

Stack Overflow用户
提问于 2012-11-02 07:52:28
回答 2查看 1.8K关注 0票数 3

是否可以确定某个进程是否是当前唯一使用SysV信号量的进程,然后以某种方式“锁定”该信号量,以便该进程可以在另一个进程再次请求访问之前安全地删除它?

EN

回答 2

Stack Overflow用户

发布于 2013-01-23 18:09:56

我会试着回答你的问题。如果我的回答不够准确,请随时编辑(或评论)我的答案。

首先,信号量大致是一个简单的整数值。当一个进程想要通过semop()函数使用它时,它有3个可能的目标:

信号量增加它的值(意味着它释放资源或向semaphore)

  • Decrease添加资源)它的值(意味着它从semaphore)

  • Wait获取或删除一些资源,以便信号量采用值0

信号量本身并不包含有关在给定时间可能正在使用它的进程的任何信息。

然后,就没有办法建立一个系统范围的“锁定”机制:

根据semop()手册页,所有特权进程(被授予CAP_IPC_OWNER权限)都可以在信号量集上运行操作。此外,特权进程(包括IPC_RMID)可以使用所有semctl()命令。

这意味着您的代码必须为这种奇特的情况做好准备,并且必须处理由此产生的错误。例如,通过以特权用户身份运行ipcrm -s <sem_id here>命令,可以随时立即删除信号量集。

票数 0
EN

Stack Overflow用户

发布于 2013-01-29 20:42:14

代码语言:javascript
复制
int a;



  if((a = semget(IPC_PRIVATE,1,0777|IPC_CREAT))==-1) {              // get semaphore a
           perror("\nFailed to create semaphore.");
           exit(0);
   }

   if((semctl(a,0,IPC_RMID,0))==-1) {                                // Return semaphore a 
           perror("\nCan't RPC_RMID.");                                             
           exit(0);                                                                                
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13187274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档