parent
19001c070b
commit
33888a7384
1 changed files with 7 additions and 3 deletions
|
|
@ -8112,7 +8112,9 @@ Object fields and global variables can be annotated via a `guard` pragma:
|
||||||
|
|
||||||
.. code-block:: nim
|
.. code-block:: nim
|
||||||
|
|
||||||
var glock: TLock
|
import std/locks
|
||||||
|
|
||||||
|
var glock: Lock
|
||||||
var gdata {.guard: glock.}: int
|
var gdata {.guard: glock.}: int
|
||||||
|
|
||||||
The compiler then ensures that every access of `gdata` is within a `locks`
|
The compiler then ensures that every access of `gdata` is within a `locks`
|
||||||
|
|
@ -8139,7 +8141,7 @@ that also implement some form of locking at runtime:
|
||||||
|
|
||||||
.. code-block:: nim
|
.. code-block:: nim
|
||||||
|
|
||||||
template lock(a: TLock; body: untyped) =
|
template lock(a: Lock; body: untyped) =
|
||||||
pthread_mutex_lock(a)
|
pthread_mutex_lock(a)
|
||||||
{.locks: [a].}:
|
{.locks: [a].}:
|
||||||
try:
|
try:
|
||||||
|
|
@ -8181,10 +8183,12 @@ the expressivity of the language:
|
||||||
|
|
||||||
.. code-block:: nim
|
.. code-block:: nim
|
||||||
|
|
||||||
|
import std/locks
|
||||||
|
|
||||||
type
|
type
|
||||||
ProtectedCounter = object
|
ProtectedCounter = object
|
||||||
v {.guard: L.}: int
|
v {.guard: L.}: int
|
||||||
L: TLock
|
L: Lock
|
||||||
|
|
||||||
proc incCounters(counters: var openArray[ProtectedCounter]) =
|
proc incCounters(counters: var openArray[ProtectedCounter]) =
|
||||||
for i in 0..counters.high:
|
for i in 0..counters.high:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue