通常は問題なく動作するマルチスレッド コードがありますが、頻繁に壊れます。私は問題を特定しようとしていますが、OpenMP を使用するとそれが難しくなります (問題はシリアルでは発生しません)。変数への複数アクセス (競合状態) がしばしばプログラムをクラッシュさせることを知っています。
複数のスレッド間で共有されているリストがあり、そのリストの push_back() が競合状態の候補であるかどうかに興味があります。そのため、時々プログラムがクラッシュしますか? もしそうなら、これを処理する方法に関する推奨事項はありますか?
- 速度が最も重要です
- を使用すると競合状態が解決されることはわかってい#pragma omp critical
ますが、アプリケーションの速度が低下する可能性があります (リストが 2 つあるため、アトミックではなくクリティカルが必要です)。
これについてよくわからない唯一の理由は、stl コンテナーを使用していくつかのテストを実行したが、テスト コードがクラッシュしなかったためです。
どんな提案でも大歓迎です!
前もって感謝します、