2014-02-06 81 views
0

我正在爲一個項目製作一個影院 - 預訂應用程序。我的影院包含10個運營商,因此每次只有10個客戶可以同時預訂。當一個客戶完成時,另一個與一個操作員連接。POSIX的條件增值稅

我建立了一個服務器 - 客戶端連接。每當有新客戶出現時,我正在創建一個新線程。現在我的問題是如何讓10個線程同時進行操作。我知道我必須使用條件變量,但不知道具體如何。

什麼是我的想法,當一個客戶端連接

lock mutex() 
counter++; 
if(counter > 10) 
    block thread() until an operator is free 
else 
    do computations 
unlock mutex() 

我知道我必須使用cond_signal和cond_wait但我不知道究竟怎麼了。任何幫助?

+0

這是一個提示:「塊線程」聽起來像「等待條件變量」。你應該能夠弄清楚「運營商是否免費」的含義。 (提示2:運營商變得自由了,因爲一些其他線程釋放了它,該線程可能應該表示條件變量)。 –

+0

PS:在現實世界中(即不在家庭作業中),更有意義的是擁有10表示10個操作符的固定線程,並使隊列中的對象表示客戶端。 –

回答

0

調用線程之前:

sem_t *sem; 
sem = (sem_t*)malloc(sizeof(sem_t)); 
sem_init(sem, 0, 10); 

線程內部:

sem_wait(sem); 

do computations 
sem_post(sem); 

sem_init的最後一個參數是多少線程將被允許執行。 每次調用sem_wait時,該值都會降低,並且如果它變爲< 0,則線程會暫停,直到它再次變爲正值。 當您調用sem_post時,該值會增加1,並且新線程可以執行內部代碼。

+0

非常感謝,但它是一個大學項目,在這部分我不允許使用信號量。我必須使它與互斥鎖和條件變量一起工作。 – spiroskafk

+0

您可以使用互斥鎖和條件變量實現自己的信號量。 –