加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Semop:当减少一组信号量时,所有信号量都会立即递减或者在第一次

发布时间:2020-12-15 21:46:00 所属栏目:安全 来源:网络整理
导读:所以,如果我有一个信号量集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
所以,如果我有一个信号量集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)手册依次说

The set of operations contained in sops is performed in array order,and atomically,that is,the operations are performed either as a complete unit,or not at all.

HP-UX semop(2)联机帮助页更加清晰:

Semaphore array operations are atomic in that none of the semaphore operations are performed until blocking conditions on all of the semaphores in the array have been removed.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读