p_read_yield在consumer_producer_problem中的用处?

时间:2013-11-30 22:27:02

标签: c concurrency parallel-processing pthreads producer-consumer

我必须创建2个数组:3个线程中的一个:*线程;和其他3个整数*缓冲区,其第一个元素缓冲区[0] = 2,其余的初始化为0.我试图理解这3个线程如何执行以下函数:

void * thread_func(void *data){
int thread_id = (int)data;
int thread_successor_id = (thread_id+1)%n;
printf("Thread #%d fired up\n", thread_id);

while(1) {

   while (buffers[thread_id] < 1)
         pthread_yield();
   buffers[thread_id]--;
   printf("Thread #%d: element taken from buffer %d, %d elements in buffer\n",
   thread_id, thread_id, buffers[thread_id]);

   while (buffers[thread_successor_id] >= BUFFER_SIZE)/*BUFFER_SIZE=5*/
          pthread_yield();
   buffers[thread_successor_id]++;
   printf("Thread #%d: element put into buffer %d, %d elements in buffer\n",
   thread_id, thread_successor_id, buffers[thread_successor_id]);

   pthread_yield();
}
}   

我认为它开始如下:

三个线程同时运行? (同时)?

+ thread_0可以消耗缓冲区[0]的2个元素,所以在第二个元素没有停止时,消耗1个元素并仅在缓冲区[1] <= 5然后在最后一个缓冲区[1]中生成此元素pthread_yield()会发生什么?

+ thread_1不能消耗缓冲区[1]的任何元素,所以在第二个时它停在第一个pthread_yield()现在它是如何继续的?

+ thread_2不能消耗缓冲区的任何元素[2]所以在第二个时它停在第一个pthread_yield()现在它是如何继续的?

任何人都能帮帮我吗?谢谢!

0 个答案:

没有答案