Problem
Suppose we have the following code:class Foo {
public:
A(.....); // If A is called, a new thread will be created
// and the corresponding function will be executed.
B(.....); // same as above
C(.....); // same as above
}
Foo f;
f.A(.....);
f.B(.....);
f.C(.....);
i) Can you design a mechanism to make sure that B is executed after A, and C is executed after B?
ii) Suppose we have the following code to use class Foo We do not know how the threads will be scheduled in the OS:
Foo f; f.A(.....); f.B(.....); f.C(.....); f.A(.....); f.B(.....); f.C(.....);
Can you design a mechanism to make sure that all the methods will be executed in sequence?
Solution
i) Can you design a mechanism to make sure that B is executed after A, and C is executed after B?Semaphore s_a(0);
Semaphore s_b(0);
A {
//
s_a.release(1);
}
B {
s_a.acquire(1);
//
s_b.release(1);
}
C {
s_b.acquire(1);
//
}
ii) Can you design a mechanism to make sure that all the methods will be executed in sequence?
Semaphore s_a(0);
Semaphore s_b(0);
Semaphore s_c(1);
A{
s_c.acquire(1);
//
s_a.release(1);
}
B{
s_a.acquire(1);
//
s_b.release(1);
}
C{
s_b.acquire(1);
//
s_c.release(1);
}
Thanks
References







0 comments:
Post a Comment