N 프로세스가 계속 될 때까지 대기하는 수집 기능을 구현하려고합니다.System V 세마포를 사용하여 gather/barrier 기능 만들기
struct sembuf operations[2];
operaciones[0].sem_num = 0;
operaciones[0].sem_op = -1; // wait() or p()
operaciones[1].sem_num = 0;
operaciones[1].sem_op = 0; // wait until it becomes 0
semop (this->id,operations,2);
초기 세마포어의 값은 문제가 모든 프로세스는의 semop 함수를 실행 한 경우에도 정지이다 N.
이다. 나는 그것이 조작이 원자 적으로 수행된다는 사실과 관련이 있다고 생각한다 (그러나 나는 그것이 무엇을 의미하는지 정확히 모른다). 하지만 왜 작동하지 않는지 나는 이해하지 못한다.
코드가 세마포어에서 1을 뺀 다음 프로세스가 마지막이 아니거나 다른 방식으로 작동해야하는 경우 프로세스를 차단합니까?
코드는 세마포어 0이 감소 할 때까지 프로세스를 차단하고, 감소 할 때까지 동시에 세마포어 1은 0이됩니다. 단일 또는 전체 또는 일부 트랜잭션입니다. – PSkocik