【发布时间】:2015-09-22 20:26:51
【问题描述】:
我正在学习 Pthread 编程。这是我在作业结束时得到的问题:
我想使用producer-consumerproblem 将源文件中的每个字节复制到一个新的.txt 文件中。
这是我的代码结构:
void *producer(....) {
while(1){
nsleep();
read_byte(....);
nsleep();
produceToBuffer(....);
}
}
void *consumer(....) {
while(1){
nsleep();
consumeFromBuffer(....);
nsleep();
write_byte(....);
}
}
int main() {
pthread_t inThread[nIn];
pthread_t outThread[nOut];
//initialize mutex locks for all functions
pthread_mutex_init(&_mutexConsume, NULL);
pthread_mutex_init(&_mutexProduce, NULL);
pthread_mutex_init(&_mutexWrite, NULL);
pthread_mutex_init(&_mutexRead, NULL);
sem_init(&empty, 0, size); //initialize semaphore signal the empty slots available
sem_init(&full, 0, 0); //initialize semaphore full signal
for(i = 0; i < nIn; i++) {
pthread_create(inThread+i, NULL, producer, null);
}
for(j = 0; j < nOut; j++) {
pthread_create(outThread+i, NULL, consumer, null);
}
}
我的问题是:生产者线程在文件末尾完成,当检测到 EOF 时为pthread_exit(0);,但对于消费者线程,我的想法是在睡眠后完成或在所有消费者线程等待信号量满时完成。
有人可以帮我吗?
【问题讨论】:
-
我不确定我是否理解您的问题。您显示的不可编译的半伪代码使情况变得更糟。你不知道如何告诉消费者输入结束了?一种可能的方法是通过在缓冲区队列中插入一个特殊值来表示这一点。
标签: c pthreads mutex semaphore producer-consumer