3 소비자 2 생산자. 하나의 버퍼 읽기 및 쓰기. 프로듀서 A가 1 요소를 버퍼 (길이 N)로 푸시하고 프로듀서 B가 2 요소를 버퍼로 푸시합니다. 활성 대기 없음. System V 세마포어를 사용할 수 없습니다. 생산자 A에 대한2 요소를 생성하는 생산자 - 소비자 생산자 POSIX 세마포어
샘플 코드 : 그들이 읽거나 소비를 제외하고
void producerA(){
while(1){
sem_wait(full);
sem_wait(mutex);
Data * newData = (Data*) malloc(sizeof(Data));
newData->val = generateRandomletter();
newData->A = false;
newData->B = false;
newData->C = false;
*((Data*) mem+tail) = *newData;
++elements;
tail = (tail + 1) % N;
sem_post(mutex);
sem_post(empty);
}
}
소비자는 비슷하지만 무관합니다. 내가 프로듀서 B.에 문제가 많은 데 분명히 나는 2 이상의 여유가있는
나는 또한 처음 올렸 될 것이다 생산자 B에 대해 다른 세마포어를 가지고 시도sem_wait(full); sem_wait(full);
등의 작업을 수행 할 수 없습니다 버퍼의 스팟들. 하지만 여전히 올바르게 세마포어를 낮추고 증가시켜야하기 때문에 제대로 작동하지 않았습니다 full
및 empty
.
이 문제를 어떤 방법으로 해결할 수 있습니까?
조건 변수는 내가 필요한 기술로 보입니다. –
프로세스에서 대기중인 활성 상태를 가질 수 없으므로 루프의 모든 반복 조건을 검사 할 수 없습니다. 그리고 더 똑똑한 것을 마음에두면 고맙겠습니다. – Aaroneiros
조건 변수의 전체 점은 활성 대기를 피하는 것입니다. –