スレッドセーフ
スレッドセーフとは、OSが複数の処理を並行して行うための技法であるマルチスレッド環境において、処理単位であるスレッドが複数同時にひとつのデータを扱っても、データが正常なまま保たれるような状態のことである。
マルチスレッド環境では、アプリケーション内で複数の処理(スレッド)が同時並行的に行われることとなるが、このとき、複数のスレッドがひとつのデータや手続きに対して同時にアクセスしようとする場合が生じる。すると、あるスレッドがデータを操作したことによって他のスレッドが利用するデータに影響が出てしまったり、あるいは同じ手続きを同時に複数のスレッドが呼び出したことによって予期しない動作が行わてしまったりといった事態が発生しかねない。スレッドセーフの状態とは、こうした事態があらかじめ想定されていて、常に正常に動作するような対策が設計上盛り込まれている状態を指している。
ただし、マルチスレッド環境においてデータや手続きへアクセスした際の影響は予測しきれないほど多彩なものなので、完璧にスレッドセーフであるような状態を実現することは難しい。実際には、どの程度スレッドセーフであるか、あるいはどの点においてスレッドセーフであるか、といった表現をとる他ない。
スレッドセーフ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/06/05 19:19 UTC 版)
スレッドセーフ(英: thread-safe)は、マルチスレッドプログラミングにおける概念である。あるプログラムコードがスレッドセーフであるという場合、そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないことを意味する[1]。特に、ある共有データへの複数のスレッドによる読み書きアクセスがあるとき、一度に1つのスレッドのみがその共有データにアクセスするようにして安全性を確保しなければならない。スレッドセーフでないコードを同時並行的に実行すると、データ競合による未定義動作を引き起こしたり、競合状態(レースコンディション)による意図しない動作を引き起こしたりする。場合によっては深刻なセキュリティホール(脆弱性)が引き起こされることもある[2]。
注釈
- ^ POSIXスレッド(Pthreads)が最初に標準化されたのはIEEE Std 1003.1c-1995である[3]。またMicrosoft WindowsではWindows 95およびWindows NTのWin32 APIにおいてスレッドが導入された。
- ^ JavaやC#にはグローバル変数は存在しないが、静的フィールドが該当する。
出典
- ^ スレッドセーフとは - 意味をわかりやすく - IT用語辞典 e-Words
- ^ CON00-C. 複数のスレッドによる競合状態を避ける
- ^ POSIX threads - Mastering C++ Multithreading [Book]
- ^ 第3回 マルチスレッドでデータの不整合を防ぐための排他制御 ― マルチスレッド・プログラミングにおける排他制御と同期制御(前編) ―:連載.NETマルチスレッド・プログラミング入門(2/3 ページ) - @IT
- ^ アプリケーション開発で質の高いコードレビューを実現するためのポイントとは ? ~ 後編~ - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
- 1 スレッドセーフとは
- 2 スレッドセーフの概要
- 3 関連項目
固有名詞の分類
- スレッドセーフのページへのリンク