看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《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
nat99up: 我覺得這個function的作用應該是 01/13 15:47
nat99up: 只有一個thread跑的出來 其他人都會卡在裡面 01/13 15:47
PunchShadow: 在signal第一個thread,後面的不會跟著signal嗎? 01/13 15:58
PunchShadow: 我在wait(barrier)內有signal(barrier) 01/13 16:00