Ответ Дэвид Бак идеально подходят: процесс планировщик не упреждающий, поэтому два процесса одинакового приоритета будет выполняться последовательно, а не одновременно, если активный один будет дождитесь неготовного семафора или явно уступите.
Но Pharo и Squeak используют одно и то же не упреждающее планирование, так почему же разница?
Это связано с морфическим взаимодействием, очень сложно угадать, где именно и когда, я не эксперт по морфию ...
Но если вы используете SharedQueue, а не Transcript, вы получите то же поведение, что и Visualworks, все 'AA', тогда все 'BB':
q := SharedQueue new: 6101.
s1 := Semaphore new.
s2 := Semaphore new.
p1 := [ 1 to: 3000 do: [:i | q nextPut: 'AA']. s1 signal ] newProcess.
p2 := [ 5000 to: 8100 do: [:i | q nextPut: 'BB'.]. s2 signal ] newProcess.
p1 resume.
p2 resume.
s1 wait.
s2 wait.
q inspect.
Я бы не сказал, что это «ошибка». Я вижу два процесса с одним и тем же приоритетом, один в очереди за другим. Что заставляет вас думать, что каждый из процессов должен уступить, а другой - работать в среде, не имеющей превентивного характера? –