Concurrency 进程与信号量的同步

Concurrency 进程与信号量的同步,concurrency,Concurrency,这是一个面试问题,任何帮助都将不胜感激 如何同步两个进程,其中一个进程增加一个值并显示该值(请注意,显示该值的进程必须仅在其为新值时显示一个值) 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 incre

这是一个面试问题,任何帮助都将不胜感激

如何同步两个进程,其中一个进程增加一个值并显示该值(请注意,显示该值的进程必须仅在其为新值时显示一个值)

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--;
}
int c=0;//我用来同步的变量
//在P1中
如果(c=0)
{
C++;
x++;//递增的值
}
//在P2中
如果(c==1)
{

cout这里有一个python的工作解决方案,需要两个信号量。 请注意,这是一个针对单个制作者/打印机的解决方案,如果您需要多个制作者/写入者,它将无法工作

   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()
从线程导入信号量,线程
x=0
ITERS=10
def生产者():
全球x
而x在上述情况下,即使改变了顺序,它仍然是错误的,因为如果在X++操作之后,但在C++操作之前,上下文切换发生,则值可能会增加两倍,因为P2将不能继续进行直到C变为1YES,但它将进入P1和X,它将再次增加伪码吗?ops c==0/c==1对应于?是否阻塞?打印机在有打印内容之前不会执行任何操作,因为SU full最初为0,并且无法获取它