PV原理操作之生產者消費者

緩衝區大小爲k

semaphore mutex=1;//in,out的互斥變量
semaphore empty=k; //可用的緩衝區大小
semaphore full=0;  //已佔用的緩衝區的大小
semaphore buff[k];//緩衝區
int in=0, out=0;// 寫 讀指針

producer(){	
	while(true){
		p(empty);
		p(mutex);//進入臨界區
		input->buff[in];
		in=(in+1)%k;
		v(mutex);//出臨界區
		v(full);
	}
}

consumer(){
	while(true){
		p(full);
		p(mutex);
		take from buff[out];
		out=(out+1)%k;
		v(mutex);
		v(empty);
	}
}


p(empty)和p(mutex)不可以互換,如果互換,當empty=0,先p(mutex),再p(empty),進程會進入阻塞,由於沒有釋放mutex,使消費者也處於阻塞狀態。
可以用一句話理解。當緩衝區沒地方的時候,不能讓他再獲得使用緩衝區的權利。
其實mutex是爲了消費者和消費者 , 生產者和生產者之間的互斥,因此可以使用兩個mutex1, mutex2使併發程度更高一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章