對於信號量實現,過程指定了什麼?在生產者/消費者問題的背景下,過程是生產者方法/消費者方法嗎?或者如果我們在P()中並且該值小於0,那麼它是否是P()?混淆信號量定義
P() {
value = value –1;
If value < 0
add the calling process to this semaphore’s list;
block this process
}
例 如果消費者運行第一生產者產生其第一個項目之前
消費者將遞減的全部價值 - >滿= -1 然後因爲該值小於1,這將增加該調用進程到這個信號量的列表。但我不確定過程是什麼。 阻止這個過程是什麼意思?這是否意味着消費者的整個方法處於停止狀態,並且生產者方法運行?
代碼:
#define N 100
typedef int semaphore;
Semaphore fullBuffer = 0; // Initially, no item in buffer
Semaphore empty = N; // Initially, num empty buffer
Semaphore mutex = 1; // No thread updating the buffer
void producer(void) {
int item;
while(TRUE){
item = produce_item();
down(&empty);
down(&mutex);
insert_item(item);
up(&mutex);
up(&full);
}
}
void consumer(void) {
int item;
while(TRUE){
down(&full);
down(&mutex);
item = remove_item();
up(&mutex);
up(&empty);
consume_item(item);
}
}
因此,消費者一旦達到障礙聲明就會「停止」,然後生產者將運行? – 2014-10-12 07:35:42
只有'完整'信號量已經爲零,或'生產者'已經將'互斥量'減少到零時纔有效。生產者可能已經在運行,但它不能被阻止,因爲如果'消費者'被阻塞,那麼它被阻塞,因爲它等待'生產者'增加信號量,這將允許它再次運行。 '生產者'和'消費者'都可以同時運行。 – SimLeek 2014-10-12 18:36:35