mirror of
https://github.com/vlang/v.git
synced 2025-08-03 17:57:59 -04:00
43 lines
767 B
V
43 lines
767 B
V
import sync
|
|
|
|
struct Counter {
|
|
pub mut:
|
|
i int
|
|
}
|
|
|
|
fn write_10000(mut co Counter, mut mx sync.Mutex) {
|
|
mx.lock()
|
|
co.i = 10000
|
|
mx.unlock()
|
|
}
|
|
|
|
fn test_mutex() {
|
|
mut co := &Counter{10086}
|
|
mut mx := sync.new_mutex()
|
|
mx.lock()
|
|
co.i = 888
|
|
th := spawn write_10000(mut co, mut mx)
|
|
mx.unlock() // after mx unlock, thread write_10000 can continue
|
|
th.wait()
|
|
mx.destroy()
|
|
assert co.i == 10000
|
|
}
|
|
|
|
fn test_try_lock_mutex() {
|
|
// In Windows, try_lock only avalible after Windows 7
|
|
$if windows {
|
|
$if !windows_7 ? {
|
|
return
|
|
}
|
|
}
|
|
mut mx := sync.new_mutex()
|
|
mx.lock()
|
|
try_fail := mx.try_lock()
|
|
assert try_fail == false
|
|
mx.unlock()
|
|
try_success := mx.try_lock()
|
|
assert try_success == true
|
|
mx.unlock() // you must unlock it, after try_lock success
|
|
mx.destroy()
|
|
}
|