parent
4846ce0f41
commit
2ecdf582a8
3 changed files with 22 additions and 0 deletions
|
|
@ -59,6 +59,7 @@ proc signal*(cond: var Cond) {.inline.} =
|
||||||
template withLock*(a: Lock, body: untyped) =
|
template withLock*(a: Lock, body: untyped) =
|
||||||
## Acquires the given lock, executes the statements in body and
|
## Acquires the given lock, executes the statements in body and
|
||||||
## releases the lock after the statements finish executing.
|
## releases the lock after the statements finish executing.
|
||||||
|
mixin acquire, release
|
||||||
a.acquire()
|
a.acquire()
|
||||||
{.locks: [a].}:
|
{.locks: [a].}:
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
10
tests/stdlib/tlocks.nim
Normal file
10
tests/stdlib/tlocks.nim
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
discard """
|
||||||
|
output: '''3'''
|
||||||
|
cmd: "nim $target --threads:on $options $file"
|
||||||
|
"""
|
||||||
|
|
||||||
|
#bug #6049
|
||||||
|
import uselocks
|
||||||
|
|
||||||
|
var m = createMyType[int]()
|
||||||
|
echo $m.use()
|
||||||
11
tests/stdlib/uselocks.nim
Normal file
11
tests/stdlib/uselocks.nim
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import locks
|
||||||
|
|
||||||
|
type MyType* [T] = object
|
||||||
|
lock: Lock
|
||||||
|
|
||||||
|
proc createMyType*[T]: MyType[T] =
|
||||||
|
initLock(result.lock)
|
||||||
|
|
||||||
|
proc use* (m: var MyType): int =
|
||||||
|
withLock m.lock:
|
||||||
|
result = 3
|
||||||
Loading…
Add table
Add a link
Reference in a new issue