В этой программе запускается четыре потока: два - это копии функции PLUS, и они увеличивают объект A на 1 десять миллионов раз, два - это копии функции MINUS, и они уменьшают объект A на 1 десять миллионов раз.
Основной поток ждет, пока не завершатся запущенные потоки, и затем печатает результат: A остается равным 0.
Code: Select all
a = 0
fins = 0
n = 2
> i, 1..n
  fplus[i] = plus
  -> fplus[i]()
  fminus[i] = minus
  -> fminus[i]()
<
> fins!=n*2
<
#.output("result = ",a)
plus()=
  #.output("-> +")
  > i, 1..10000000
    .a!
    .a += 1
    .a~
  <
  #.output("<- +")
  .fins!
  .fins += 1
  .fins~
.
minus()=
  #.output("-> -")
  > i, 1..10000000
    .a!
    .a -= 1
    .a~
  <
  #.output("<- -")
  .fins!
  .fins += 1
  .fins~
.Code: Select all
-> +
-> -
-> +
-> -
<- +
<- -
<- -
<- +
result = 0
