生產者消費者問題

2022-05-13 02:13:07 字數 1877 閱讀 1745

存活生產者計數

//int ids[30] = ;

int count = 0; //

計數消費產品數量

int pcount = 0; //

計數生產產品數量

void

init()

void put(int tid, int

data)

//讀資料並移走

struct product * get(int

tid)

else

if(id <= 10 && (id%2 == tid%2

))

else

if(id > 20

)

pos = (pos+1)%buffer_size;

}if( produce )

if( buffer.readpos >=buffer_size )

buffer.readpos = 0

;

//如果取得了產品則釋放乙個緩衝區可寫的訊號量,否則釋放乙個可讀的訊號量

if( produce )

sem_post(&buffer.sem_write);

else

sem_post(&buffer.sem_read);

pthread_mutex_unlock(&buffer.rlock);

}else

pthread_mutex_unlock(&buffer.rlock);

return

produce;

}void *producer(void *data)

//每退出乙個生產者執行緒後,thread_count 減1

pthread_mutex_lock(&buffer.lock

); --thread_count;

pthread_mutex_unlock(&buffer.lock

);

return

null;

}void *consumer(void *data)

pthread_mutex_lock(&buffer.lock

);

//當所有生產者執行緒已退出,且緩衝區內已沒有該執行緒可消費的產品時,退出該執行緒

if(d == null && thread_count == 0

)

else

pthread_mutex_unlock(&buffer.lock

); }

return

null;

}int main(void

)

for(i = 0; i<30; ++i)

printf(

"product %d products\n

", pcount);

printf(

"consume %d products\n

", count);

return0;

}

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...

生產者 消費者問題

1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...