Довольно конкретный вопрос, но мне было интересно, если у кого-то возникли проблемы с получением первого сигнала, который будет обнаружен в отношениях между потребителем и производителем с несколькими потребителями (веб-сервер HTTP)
for(i = 0; i < num_threads; i++) {
pthread_cond_init(&condVars[i], NULL);
if(strcmp(policy,"FIFO") == 0)
pthread_create(&threadArr[i], NULL, workerFIFO, &condVars[i]);
else
pthread_create(&threadArr[i], NULL, workerSFF, &condVars[i]);
}
listenfd = Open_listenfd(port);
// Producer
while (1) {
clientlen = sizeof(clientaddr);
connfd = Accept(listenfd, (SA *)&clientaddr, (socklen_t *) &clientlen);
pthread_mutex_lock(&mutex);
while(numRequests == num_buffers)
pthread_cond_wait(&empty, &mutex);
if(strcmp(policy,"FIFO") == 0)
putFIFO(connfd);
else
putSFF(connfd);
numRequests++;
pthread_cond_signal(&condVars[nextWorker]);
nextWorker = (nextWorker + 1) % num_threads;
pthread_mutex_unlock(&mutex);
printf("%s\n", "Look not dead!!!");
}
// Consumer
while(1){
pthread_mutex_lock(&mutex);
while(numRequests == 0) {
printf("%u\n", condVar);
pthread_cond_wait(condVar, &mutex);
printf("%s", "caught it");
}
printf("%s, %u\n", "Its Workingzz! ZOMGZ!!!", condVar);
int connfd = buffer[nextOutFIFO];
nextOutFIFO = (nextOutFIFO + 1) % num_buffers;
numRequests--;
pthread_cond_signal(&empty);
pthread_mutex_unlock(&mutex);
requestHandle(connfd);
Close(connfd);
}