擅长:python、mysql、java
<p>在伪代码中:</p>
<pre><code>main()
1. set lock for loop1
2. start loop1 on background thread
3. start loop2 on background thread
4. wait
loop1()
1. do the following forever:
2. acquire lock for loop1
3. print 'a'
4. release lock for loop2
loop2()
1. do the following forever:
2. acquire lock for loop2
3. print 'b'
4. release lock for loop1
</code></pre>
<p>您可以将锁实现为一个共享内存变量或一个等待从对等方获取消息的循环。获取锁意味着阻塞或旋转锁定(轮询),直到锁就绪;释放锁将适当地设置共享变量或将正确的消息发送给正确的对等方。在</p>
<p>编辑:根据一条评论,下面是对loop1()和loop2()的更全面的开发,使用了许多可用的实现策略之一:</p>
^{pr2}$
<p>此实现使用自旋锁并依赖线程安全共享变量<code>lock</code>来协调工作。旋转锁或旋转锁可能不适合您的应用。您可以将这些与一些阻塞机制结合使用,以减少处理过程中的一些延迟。在</p>
<p>关键是<code>lock</code>是有状态的,并且(应该)只能由正确的线程获取。如果每个线程都“知道”了“下一个”线程,并在完成后向它发送消息,则可以对消息传递执行相同的操作。。。然后所有线程都会等待得到消息。在</p>
<pre><code>main()
1. start loop1 on background thread
2. start loop2 on background thread
3. message loop1
4. wait
loop1()
1. do the following forever
2. loop until message received
3. print 'a'
4. message loop2
loop2()
1. do the following forever
2. loop until message received
3. print 'b'
4. message loop1
</code></pre>