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