Semop:当减少一组信号量时,所有信号量都会立即递减或者在第一次
所以,如果我有一个信号量集semid与num_of_sems信号量和sembuf * deleter_searchers_down
struct sembuf *deleter_searchers_down = malloc(sizeof (*deleter_searchers_down) * num_of_sems); for (i = 0; i < num_of_sems; ++i) { (deleter_searchers_down + i)->sem_op = -1; (deleter_searchers_down + i)->sem_num = i; (deleter_searchers_down + i)->sem_flg = SEM_UNDO; } semop(semid,deleter_searchers_down,num_of_sems); 对semop的调用将尝试立即降低集合中的所有信号量,或者一旦它试图降低0的第一个信号量并且在某个特定信号量的某些其他进程之后继续,它是否会阻塞? 解决方法
在所有更新都可以作为一个单元进行之前不会发生更新
关于这一点,POSIX规范可能更清楚,尽管它确实说semop是原子的. 在Linux上,glibc中的semop(3)是semop(2)的简单包装器. semop(2)手册依次说
HP-UX semop(2)联机帮助页更加清晰:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |