【发布时间】:2009-12-01 05:38:32
【问题描述】:
一个非常具体的问题,但我想知道是否有人在获取与多个消费者(HTTP Web 服务器)的消费者-生产者关系中捕获的第一个信号时遇到任何问题
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);
}
【问题讨论】:
-
您是只有 1 个消费者,以及几个使用不同条件变量的生产者,还是多个消费者 - 但都使用相同的互斥锁?
标签: c multithreading