这是一个面试问题,任何帮助都将不胜感激
如何同步两个进程,其中一个进程增加一个值并显示它(P.S。显示该值的进程必须仅在其新值时显示一个值)
Ex:int x = 5; P1:将其增加到6 P2:必须显示6(仅一次),并且当它变为7时必须再次显示
我回答说我会使用类似
的信号量int c=0; // variable that I used to synchronize
// In P1
if( c = 0 )
{
c++;
x++; // value that is incremented
}
// in P2
if( c == 1 )
{
cout<<x;
c--;
}
然后他询问如果在将c设置为1之后但在递增x之前从进程P1切换到P2时会怎么做(在这种情况下,它会在递增x之前进入P2)
我无法回答这一部分。任何帮助将不胜感激。
答案 0 :(得分:1)
这是python中的一个有效解决方案,需要2个信号量。 请注意,这是单个生产者/打印机的解决方案,如果您需要多个生产者/编写者,它将无法工作
from threading import Semaphore, Thread
x = 0
ITERS = 10
def producer():
global x
while x < ITERS:
s_empty.acquire()
x += 1
s_full.release()
def printer():
while x < ITERS:
s_full.acquire()
print(x)
s_empty.release()
s_empty = Semaphore(1)
s_full = Semaphore(0)
t1 = Thread(target=producer)
t2 = Thread(target=printer)
t1.start()
t2.start()