CriticalSection

CriticalSection[var,expr]

並列計算のためのロック var を取得し,expr を評価し,ロック var を解放する.

CriticalSection[{var1,var2,},expr]

すべての変数 variを同時にロックする.

詳細

  • 任意の並列カーネル上で同時実行できる同じロック変数の危険域が最高で1つ許容される.
  • ロックとして使われる変数はマスターカーネルの値を持っていてはならない.
  • WithLock[var,expr]CriticalSection[var,expr]に等しい.

例題

すべて開くすべて閉じる

  (1)

1ブロックのコードを他のスレッドの干渉から保護する:

更新コードへのアクセスから保護しないと,サブカーネルが結果を上書きしてしまうかもしれない:

スコープ  (2)

ロック変数は sym[index]の形でもよい:

インデックス付きの2つのロック変数を使って更新操作のソースインデックスと宛先インデックスを保護する:

アプリケーション  (1)

別々の読書き操作はスレッドセーフではない:

CriticalSectionを使ってコードセクション全体を原子的にする:

特性と関係  (3)

ロックはカーネルIDを局所変数に書込むことで得られる:

危険域の代りに共有関数を使って同期することができる:

これより効率は下がるが,共有変数と危険域を使うこともできる:

WithLockCriticalSectionがシンボルに動作するのと同じように動作する:

考えられる問題  (1)

ロック変数は危険域で使用される前に値を持ってはならない:

ロック変数に値があるときに起るデッドロックは放棄することで解消できる:

おもしろい例題  (1)

デッドロックが回避できる「食事をする哲学者」:

Wolfram Research (2008), CriticalSection, Wolfram言語関数, https://reference.wolfram.com/language/ref/CriticalSection.html (2020年に更新).

テキスト

Wolfram Research (2008), CriticalSection, Wolfram言語関数, https://reference.wolfram.com/language/ref/CriticalSection.html (2020年に更新).

CMS

Wolfram Language. 2008. "CriticalSection." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/CriticalSection.html.

APA

Wolfram Language. (2008). CriticalSection. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/CriticalSection.html

BibTeX

@misc{reference.wolfram_2024_criticalsection, author="Wolfram Research", title="{CriticalSection}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/CriticalSection.html}", note=[Accessed: 03-December-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_criticalsection, organization={Wolfram Research}, title={CriticalSection}, year={2020}, url={https://reference.wolfram.com/language/ref/CriticalSection.html}, note=[Accessed: 03-December-2024 ]}