Concurrency 进程与信号量的同步
这是一个面试问题,任何帮助都将不胜感激 如何同步两个进程,其中一个进程增加一个值并显示该值(请注意,显示该值的进程必须仅在其为新值时显示一个值) Ex:int x=5; P1:将其增加到6 P2:必须显示6(仅一次),并且在变为7时必须再次显示 我回答说我会用一个信号灯,比如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
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,并且无法获取它