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