Многопоточность
Posted: Mon Jun 26, 2017 2:17 pm
SPL может выполнять несколько потоков одновременно, также можно иметь доступ к одному и тому же объекту одновременно из нескольких потоков.
В этой программе запускается четыре потока: два - это копии функции PLUS, и они увеличивают объект A на 1 десять миллионов раз, два - это копии функции MINUS, и они уменьшают объект A на 1 десять миллионов раз.
Основной поток ждет, пока не завершатся запущенные потоки, и затем печатает результат: A остается равным 0.
Вывод программы:
В этой программе запускается четыре потока: два - это копии функции 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