私のマルチスレッドアプリケーションでは、同じstd::deque
を使用する2つのスレッドがあります。それらのうちの1つはそれに書き込み、もう一方はそれから読み取る(データ分析のために)。同じデキューにアクセスするマルチスレッドのC++
私はこのエラーを取得する:
Deque iterator not dereferencable
EDIT: これは私が両端キューからの読み取りに使用するコードです。 if-conditionのどこかでエラーが発生します(ここでは、dequeにはat
でアクセスしています)。
for (int i = 0; i <myDeque.size(); i++){
try{
if (myDeque.at(i) > 10){
//do stufff
}
}
catch (...){
cout << "ERROR" << endl;
}
}
これは、このようなことが、この両端キューのマルチスレッドアクセスによって発生すると仮定します。 try-catch
ブロックでエラーをキャッチできません。もっと深い「飛行機」に投げ込まれているので、私はこれを行うことはできませんか? このエラーを修正する可能性はありますか?
は 'deque'空ですか? –
いいえ、空ではありません。 – black
デキューオブジェクトへのアクセスをシリアル化するために同期メカニズム(ロックやmutexなど)を使用していますか?もしそうでなければ、あなたはすべきです。これは、複数のスレッドが共有データ構造にアクセスできるようにする場合の標準ソリューションです。 –