- 论坛徽章:
- 0
|
在solaris上执行semop时报错ENOSPC:
相关函数如下:
1.初始化函数
int init_shareBlk(char *lockID)
{
union semun arg;
key = atoi(lockID);
if ((shblk_sem_id = semget(key, 1, IPC_CREAT|0666)) < 0)
{
log_error(SHBLK_MODULE, "lock semaphore error");
return shblk_sem_id;
}
arg.val = 0;
semctl(shblk_sem_id, 0, SETVAL, arg);
}
2.加锁函数
void lock_shareBlk()
{
struct sembuf lockops[2];
lockops[0].sem_num = 0;
lockops[0].sem_op = 0;
lockops[0].sem_flg = 0;
lockops[1].sem_num = 0;
lockops[1].sem_op = 1;
lockops[1].sem_flg = SEM_UNDO;
semop(shblk_sem_id, lockops, 2);
}
3.解锁函数
void unlock_shareBlk()
{
struct sembuf unlockop;
unlockop.sem_num = 0;
unlockop.sem_op = -1;
unlockop.sem_flg = SEM_UNDO;
semop(shblk_sem_id, &unlockop, 1);
}
同时有多个并发进程,都需要刷新共享内存,当运行一段时间后就会出现ENOSPC错误,
man semop:
ENOSPC
The limit on the number of individual processes
requesting an SEM_UNDO would be exceeded.:
请问在sun 15k上调整哪个系统参数可以解决这个问题.谢谢! |
|