Re: [理工] 105 台大資工 計系
看板Grad-ProbAsk作者PunchShadow (PunchShadow)時間6年前 (2018/01/13 15:19)推噓0(0推 0噓 4→)留言4則, 2人參與討論串2/3 (看更多)
※ 引述《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)
}
-
以上是小弟的淺見
希望能釣出高手指導指導~
-
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.49.120
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1515827974.A.4AB.html
→
01/13 15:47,
6年前
, 1F
01/13 15:47, 1F
→
01/13 15:47,
6年前
, 2F
01/13 15:47, 2F
→
01/13 15:58,
6年前
, 3F
01/13 15:58, 3F
→
01/13 16:00,
6年前
, 4F
01/13 16:00, 4F
討論串 (同標題文章)