T/O マルチスレッド・プログラミングの文脈では、「データ競合(data race)」と「競合状態(race condition)」は直交した異なる概念を表す1。両者ともに回避すべき事象だが、問題を取り扱うレイヤは明確に区別されるべき。 データ競合(data race)は、マルチスレッド・プログラム実装上の問題である。 競合状態(race condition)は、並行処理システム設計上の問題である。 ここではJava, C#, C++あたりのマルチスレッド対応手続き型ベースのプログラミング言語を取り上げるが、言語パラダイムによらずマルチスレッド処理(共有メモリ型の並行処理機構)ならば広範に適用可能である。また言語仕様として両者を明確に区別するRust言語も取り上げる。 「データ競合(data race)」が何であるかは、それぞれのプログラミング言語仕様にて定義される。競合状態(race c
![データ競合(data race)と競合状態(race condition)を混同しない - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/1e1a3a5f3479547e909937b6103c96381d6f3104/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgzJTg3JUUzJTgzJUJDJUUzJTgyJUJGJUU3JUFCJUI2JUU1JTkwJTg4JTI4ZGF0YSUyMHJhY2UlMjklRTMlODElQTglRTclQUIlQjYlRTUlOTAlODglRTclOEElQjYlRTYlODUlOEIlMjhyYWNlJTIwY29uZGl0aW9uJTI5JUUzJTgyJTkyJUU2JUI3JUI3JUU1JTkwJThDJUUzJTgxJTk3JUUzJTgxJUFBJUUzJTgxJTg0JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jNTMzOTRkYzFjMGY2MGVkNzI0M2ZhODZhY2NmZGI4NA%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB5b2hob3kmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWYxNTdlY2YwM2Y3YjQ5ZmVjYzY0N2I5Y2IzMjk2MmVh%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D39acef1f51462c0d29a4c51faddd62b4)