- 論壇徽章:
- 0
|
在solaris上執(zhí)行semop時報錯ENOSPC:
相關(guān)函數(shù)如下:
1.初始化函數(shù)
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.加鎖函數(shù)
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.解鎖函數(shù)
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);
}
同時有多個并發(fā)進程,都需要刷新共享內(nèi)存,當運行一段時間后就會出現(xiàn)ENOSPC錯誤,
man semop:
ENOSPC
The limit on the number of individual processes
requesting an SEM_UNDO would be exceeded.:
請問在sun 15k上調(diào)整哪個系統(tǒng)參數(shù)可以解決這個問題.謝謝! |
|