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

看板Grad-ProbAsk作者 (PunchShadow)時間6年前 (2018/01/13 15:19), 編輯推噓0(004)
留言4則, 2人參與, 6年前最新討論串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
我覺得這個function的作用應該是
01/13 15:47, 1F

01/13 15:47, 6年前 , 2F
只有一個thread跑的出來 其他人都會卡在裡面
01/13 15:47, 2F

01/13 15:58, 6年前 , 3F
在signal第一個thread,後面的不會跟著signal嗎?
01/13 15:58, 3F

01/13 16:00, 6年前 , 4F
我在wait(barrier)內有signal(barrier)
01/13 16:00, 4F
文章代碼(AID): #1QMRC6Ih (Grad-ProbAsk)
文章代碼(AID): #1QMRC6Ih (Grad-ProbAsk)