2020-07-08 11:05:43 +02:00
|
|
|
import time
|
|
|
|
|
|
|
|
fn incr(shared foo []int, index int) {
|
|
|
|
for _ in 0 .. 100000 {
|
|
|
|
lock foo {
|
|
|
|
foo[index] = foo[index] + 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lock foo {
|
|
|
|
foo[2]++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_shared_array() {
|
|
|
|
shared foo := &[10, 20, 0]
|
|
|
|
go incr(shared foo, 0)
|
|
|
|
go incr(shared foo, 1)
|
|
|
|
go incr(shared foo, 0)
|
|
|
|
go incr(shared foo, 1)
|
|
|
|
for _ in 0 .. 50000 {
|
|
|
|
lock foo {
|
2021-01-23 13:33:32 +01:00
|
|
|
foo[0] -= 2
|
|
|
|
foo[1] += 3
|
2020-07-08 11:05:43 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
mut finished_threads := 0
|
|
|
|
for {
|
|
|
|
rlock foo {
|
2021-01-23 13:33:32 +01:00
|
|
|
finished_threads = foo[2]
|
2020-07-08 11:05:43 +02:00
|
|
|
}
|
|
|
|
if finished_threads == 4 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
time.sleep_ms(100)
|
|
|
|
}
|
|
|
|
rlock foo {
|
2021-01-23 13:33:32 +01:00
|
|
|
f0 := foo[0]
|
|
|
|
f1 := foo[1]
|
2020-07-22 20:42:51 +02:00
|
|
|
assert f0 == 100010
|
|
|
|
assert f1 == 350020
|
2020-07-08 11:05:43 +02:00
|
|
|
}
|
|
|
|
}
|
2021-02-01 20:07:01 +01:00
|
|
|
|
|
|
|
fn test_shared_init_syntax() {
|
|
|
|
shared foo := &[3, 5, 6, -12]
|
|
|
|
shared bar := [-12.5, 23.125, 6.0625, 12.5]
|
|
|
|
shared baz := &[]int{len: 5, cap: 12}
|
|
|
|
shared qux := []f64{len: 7}
|
2021-02-02 13:13:13 +01:00
|
|
|
shared quux := new_array()
|
2021-02-01 20:07:01 +01:00
|
|
|
lock foo {
|
|
|
|
foo[2] = 20
|
|
|
|
}
|
|
|
|
lock bar {
|
|
|
|
bar[3] = 12.5
|
|
|
|
}
|
2021-02-02 13:13:13 +01:00
|
|
|
lock baz, qux, quux {
|
2021-02-01 20:07:01 +01:00
|
|
|
baz[3] = 12
|
|
|
|
qux[6] = -17.0625
|
2021-02-02 13:13:13 +01:00
|
|
|
quux[2] = 7.0625
|
2021-02-01 20:07:01 +01:00
|
|
|
}
|
2021-02-02 13:13:13 +01:00
|
|
|
rlock foo, bar, baz, qux, quux {
|
2021-02-01 20:07:01 +01:00
|
|
|
assert foo[2] == 20
|
|
|
|
assert bar[3] == 12.5
|
|
|
|
assert baz[3] == 12
|
|
|
|
assert qux[6] == -17.0625
|
2021-02-02 13:13:13 +01:00
|
|
|
assert quux[1] == 6.25
|
|
|
|
assert quux[2] == 7.0625
|
2021-02-01 20:07:01 +01:00
|
|
|
}
|
|
|
|
}
|
2021-02-02 13:13:13 +01:00
|
|
|
|
|
|
|
fn new_array() []f64 {
|
|
|
|
a := [12.5, 6.25, -3.125, 1.75]
|
|
|
|
return a
|
|
|
|
}
|