最終更新:2021-01-04 (月) 17:08:25 (1208d)
スレッドセーフ
Top / スレッドセーフ
あるコードがスレッドセーフであるという場合、そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないことを意味する。
条件
- 関数内のスタティック変数やグローバル変数の操作をしない。
- 他の非スレッドセーフな関数を呼んでいない。
- そのような変数の操作をする際、その部分をmutexなどで同期化し、複数のスレッドが同時には操作しないように制限している。
POSIX
- POSIX.1-2001 と POSIX.1-2008では、一部の例外を除き、 標準で規定されている全ての関数がスレッドセーフであることを要求している。 以下の関数が例外
- 非スレッドセーフな関数
C++11
データ競合
- (1) 同一メモリ位置に対するアクセスにおいて、
- (2) 少なくとも一方が変更(modify)操作であり、
- (3) 異なるスレッド上から同時に行われるとき。