Re: [理工] 105 台大資工 計系

作者: PunchShadow (PunchShadow)   2018-01-13 15:19:31
※ 引述《Kingsword (Shanboy)》之銘言:
:
: OS部分:
: 8.這題跟104年的椅子那題有點類似但好像比較簡單
: 但關於自己寫semaphore的題目每次我都不知道怎麼下手
: 這題的意思是barrier這個struct是一個函式內含兩個semaphore嗎?
: 我的想法是這樣不知道對不對
: typedef struct{
: semaphore mutex(1) //做counter的互斥
: semaphore barrier(0) //同步
: wait (mutex)
: count++
: signal (mutex)
: wait (barrier)
: }barrier
: barrier_wait(barrier*b,int n){
: while(count==n) signal(barrier)
: }
: 關於OS同步小弟我每次都一個頭兩個大><
: 希望各位大大能給點指引 謝謝各位了!
K大好:
我覺得你的寫法好像怪怪的
struct裡面是宣告資料型態
應該為
typedef struct{
semaphore mutex(1); //對counter作互斥存取
semaphore barrier(0); //對thread作blocked
int counter = 0 //blocked threads 數量
}barrier;
這樣即可
-
再來是barrier_wait()的部分
我的寫法是這樣(也不太確定是不是對的)
barrier_wait(barrier *b, int n){
wait(mutex)
counter = counter + 1;
if(counter == n) signal(barrier); //釋放blocked的一個thread
signal(mutex)
wait(barrier) //一開始barrier是0,所以所有threads到這邊皆blocked住
wait(mutex)
counter = counter - 1;
if(counter != 0) signal(barrier) //釋放下個thread
signal(mutex)
}
-
以上是小弟的淺見
希望能釣出高手指導指導~
-
作者: PunchShadow (PunchShadow)   2018-01-13 15:58:00
在signal第一個thread,後面的不會跟著signal嗎?我在wait(barrier)內有signal(barrier)
作者: nat99up (NAt)   2018-01-13 15:47:00
我覺得這個function的作用應該是只有一個thread跑的出來 其他人都會卡在裡面

Links booklink

Contact Us: admin [ a t ] ucptt.com