v/vlib/v/tests/shared_array_test.v

54 lines
689 B
V

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 {
unsafe {
foo[0] -= 2
foo[1] += 3
}
}
}
mut finished_threads := 0
for {
rlock foo {
finished_threads = unsafe {
foo[2]
}
}
if finished_threads == 4 {
break
}
time.sleep_ms(100)
}
rlock foo {
f0 := unsafe {
foo[0]
}
f1 := unsafe {
foo[1]
}
assert f0 == 100010
assert f1 == 350020
}
}