diff options
author | Anatoly Galiulin <galiulin.anatoly@gmail.com> | 2016-02-17 17:05:20 +0600 |
---|---|---|
committer | Anatoly Galiulin <galiulin.anatoly@gmail.com> | 2016-02-17 17:05:20 +0600 |
commit | 0290bc224042ae8fb943dd55f76c046163f5062e (patch) | |
tree | 42c16beb4e8774e59f2af0f71fce2786bee95119 /lib/system | |
parent | 2e3c403d2b4c2f39f6cf692586feafc67d5663ef (diff) | |
download | Nim-0290bc224042ae8fb943dd55f76c046163f5062e.tar.gz |
Added reentrant locks module to stdlib
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/syslocks.nim | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/system/syslocks.nim b/lib/system/syslocks.nim index 7a113b9d4..907a6c609 100644 --- a/lib/system/syslocks.nim +++ b/lib/system/syslocks.nim @@ -75,12 +75,24 @@ else: type SysLock {.importc: "pthread_mutex_t", pure, final, header: "<sys/types.h>".} = object + SysLockAttr {.importc: "pthread_mutexattr_t", pure, final + header: "<sys/types.h>".} = object SysCond {.importc: "pthread_cond_t", pure, final, header: "<sys/types.h>".} = object + SysLockType = distinct cint + + proc SysLockType_Reentrant: SysLockType = + {.emit: "`result` = PTHREAD_MUTEX_RECURSIVE;".} - proc initSysLock(L: var SysLock, attr: pointer = nil) {. + proc initSysLock(L: var SysLock, attr: ptr SysLockAttr = nil) {. importc: "pthread_mutex_init", header: "<pthread.h>", noSideEffect.} + proc initSysLockAttr(a: var SysLockAttr) {. + importc: "pthread_mutexattr_init", header: "<pthread.h>", noSideEffect.} + + proc setSysLockType(a: var SysLockAttr, t: SysLockType) {. + importc: "pthread_mutexattr_settype", header: "<pthread.h>", noSideEffect.} + proc acquireSys(L: var SysLock) {.noSideEffect, importc: "pthread_mutex_lock", header: "<pthread.h>".} proc tryAcquireSysAux(L: var SysLock): cint {.noSideEffect, |