关于使用semctl何时删除信号量

孟如庭 2016-03-11 06:11:17
使用了semget/semop进行同步的操作。SEMOP中设置的flag是SEM_UNDO

程序运行完发现通过ipcs -s查看发现信号量一直存在,应该怎么删除呢?

如果semctl直接删除,但是如果有其他程序在调用,就会出错,有没有类似windows下 互斥量releaseMutex(mutex)、closehandle(mutex)这种类似的操作呢?

我想出的方法是个不通方法,semct通过GETNCNT+GETPID来判断,如果GETNCNT==0,pid是本线程,就进行删除,这样是否可以?有问题吗?或者有更好的方法吗,求教。


...全文
488 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟如庭 2016-03-14
  • 打赏
  • 举报
回复
求教。。。。
孟如庭 2016-03-11
  • 打赏
  • 举报
回复
主楼的方法有问题,如果一个进程内有三线程,一个已经semctl释放了,另外两个只semget,还没有获得,则另外两线程无法同步
孟如庭 2016-03-11
  • 打赏
  • 举报
回复
引用 1 楼 nswcfd 的回复:
全局资源的管理是个麻烦事,由程序内部解决不如交给外围脚本管理清晰(一家之言而已,仅供参考)
由于不提供运行程序,只提供库,所以你说的方法我不能用
nswcfd 2016-03-11
  • 打赏
  • 举报
回复
全局资源的管理是个麻烦事,由程序内部解决不如交给外围脚本管理清晰(一家之言而已,仅供参考)

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧