(1) ping pong操作最直观的理解应该是乒乓球。
球员A 与 球员B打乒乓球:
(1)B wait A打过来的球
(2)A 把球打给 B
(3)A wait B打过来的球
(4)B 把球打给 A
流程:(1)->(2)->(3)->(4)->(1)->(2)->(3)->(4)->(1)->(2)->(3)->(4)->(1)->(2)->(3)->(4)->。。。
A流程:(2)->(3)->(2)->(3)->(2)->(3)->(2)->(3)->(2)->(3)->。。。
B流程:(1)->(4)->(1)->(4)->(1)->(4)->(1)->(4)->(1)->(4)->。。。
球有两个方向:从A->B = 锁A,从B->A = 锁B。
对球的操作有两种:打球 = 解锁,等球 = 加锁。
A流程:解锁A->加锁B->解锁A->加锁B->解锁A->加锁B->解锁A->加锁B->...
B流程:加锁A->解锁B->加锁A->解锁B->加锁A->解锁B->加锁A->解锁B->...
按照上面的流程球桌上才会始终有一个球,如果A球员打球后没有等球又去打球,那么飞向B球员就会有两个球,B会来不及处理。
线程A:
functionA {
while(1)
{
unlock A
...
lock B
}
}
线程B:
functionB {
while(1)
{
lock A
...
unlock B
}
}
ping-pang 在异步FIFO中的应用
参考连接:
乒乓操作(Ping-Pong)的理解:为什么是另一种pipeline?_weixin_43701504的博客-CSDN博客