操作信号量报错errno=28

ewolfe 2012-02-18 04:33:51
系统 unix/sco

lock={0, -1, SEM_UNDO}
semop(nSemId[cId], & lock, 1)

程序应该是已经运行了五、六年相对稳定的程序,但移到另一个环境时突然报错。错误代号为28

strerror(28): No space left on device!


重启系统后多数情况下可以正常使用,当使用一段时间后,又会出现这个错误!
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ewolfe 的回复:]

SEM_UNDO 应该不是这个的问题。

这个程序已经运行好多看了,最新安装到其它服务器上才出现的!
[/Quote]
我自遇到过,一个reader/writer函数,里面用了SEM_UNDO, 很多年没有问题,最近移植到另一个环境,发现SEM_UNDO引起的问题。
我的意思是,很多年没有出问题,并不表示没有问题,如果楼主没有找到其他原因,可以考虑一下是不是SEM_UNDO引起的。
ewolfe 2012-02-18
  • 打赏
  • 举报
回复
SEM_UNDO 应该不是这个的问题。

这个程序已经运行好多看了,最新安装到其它服务器上才出现的!
mymtom 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mymtom 的回复:]

错误原因可能与SEM_UNDO有关。
程序的P操作和V操作不在同一个进程中的话,用SEM_UNDO会引起问题。
[/Quote]
简单来说:
如果信号量用作互斥或者说临界区操作的话,SEM_UNDO是没有问题的。
如果信号量用在生产者消费者问题中的话SEM_UNDO会引起问题。
mymtom 2012-02-18
  • 打赏
  • 举报
回复
错误原因可能与SEM_UNDO有关。
程序的P操作和V操作不在同一个进程中的话,用SEM_UNDO会引起问题。
justkk 2012-02-18
  • 打赏
  • 举报
回复
参考一下
...的Linux技术网站 - 网站导航 - Linux通用技术 - Linux编程与内核

试着运行“七、信号灯应用实例”部分的那个例子,看看
the sizeof of struct sem_undo 的结果
justkk 2012-02-18
  • 打赏
  • 举报
回复
ENOSPC
The limit on the number of individual processes requesting a SEM_UNDO flag would be exceeded.

是不是两个环境的内核参数有差异?
沭水河畔 2012-02-18
  • 打赏
  • 举报
回复
要么是磁盘空间满了,要么是i-node满了。删一些吧或者转移到别的磁盘。
df -i或df -h看一下。

23,120

社区成员

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

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