Nimで再入可能ロックを提供する rlocks
はじめに
こんにちは。高校3年の樅山です。
今回は、Nimで再入可能ロックを提供する標準ライブラリ、rlocks
を解説します。
この記事は、Nim Advent Calendar 2020 その2 の16日目です。
他の標準ライブラリを調べる👇
rlocks
rlocks
は、再入可能なロックを提供するNimの標準ライブラリです。
ロックについては、前回の『Nimでロックと条件変数を提供する locks』を参照してください。
再入可能ロックとは
そもそも再入可能であるとは、複数の呼び出し元から同時に呼び出されてもデッドロックやデータ競合などの問題が発生しないという性質のことです。
再入可能である場合、スレッドセーフであると言えます。
再入可能ロックとは、複数のスレッドから取得・解放が行われてもそれらを処理できるロックです。
再入可能ロックを用いることで、以下のようなケースに対応できます。
- 割り込みを実装したいとき
- ロック待機時間が最も長い呼び出し元に取得を認めるような公平なロックを実装したいとき
再入可能ロックを初期化する
initRLock
プロシージャを用います。
proc initRLock(lock: var RLock) {.inline, raises: [], tags: [].}
再入可能ロックを取得する
acquire
プロシージャを用います。
proc acquire(lock: var RLock) {.raises: [], tags: [].}
再入可能ロックを解放する
release
プロシージャを用います。
proc release(lock: var RLock) {.raises: [], tags: [].}
再入可能ロックを取得・解放する
withRLock
テンプレート内のプログラムが実行される前に取得され、実行後に開放されます。
template withRLock(lock: var RLock; code: untyped): untyped
参考文献
Author And Source
この問題について(Nimで再入可能ロックを提供する rlocks), 我々は、より多くの情報をここで見つけました https://qiita.com/momeemt/items/942d0d10fa67f0cb532a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .