This is probably a safer version. It works for me.<br><br>semA := Semaphore new.<br>semB := Semaphore new.<br><br>thread1 := [Transcript cr; nextPutAll: 'b1'. semB signal. semA wait.<br> Transcript cr; nextPutAll: 'b2'. ] fork.
<br>thread2 := [Transcript cr; nextPutAll: 'a1'. semA signal. semB wait.<br> Transcript cr; nextPutAll: 'a2'.] fork.<br><br>[thread1 isTerminated and: [thread2 isTerminated]] whileFalse: <br> [(Delay forMilliseconds: 100) wait].
<br>Transcript flush<br><br>Now to move on to another pattern.<br><br>JTS<br>