【发布时间】:2017-05-14 22:45:14
【问题描述】:
正如您在 semaphore System V 文档 (http://man7.org/linux/man-pages/man2/semop.2.html) 中看到的,有一部分内容如下:
示例
以下代码段使用 semop() 原子地等待 信号量 0 的值变为零,然后递增信号量 值加一。
struct sembuf sops[2]; int semid; /* Code to set semid omitted */ sops[0].sem_num = 0; /* Operate on semaphore 0 */ sops[0].sem_op = 0; /* Wait for value to equal 0 */ sops[0].sem_flg = 0; sops[1].sem_num = 0; /* Operate on semaphore 0 */ sops[1].sem_op = 1; /* Increment value by one */ sops[1].sem_flg = 0; if (semop(semid, sops, 2) == -1) { perror("semop"); exit(EXIT_FAILURE); }
在这个例子之后我有几个问题:
1- (semop(semid, sops, 2) == -1) 是否执行 2 个 sops 职位? sops[0] 和 sops[1]?
2- 如果是这样,为什么 sops[0].sem_op = 0; 等待 semid 的值等于 0?
【问题讨论】: