2016-11-15 2 views
0

スレッドの呼び出しat(i)関数を呼び出し、スレッドの呼び出しを呼び出すpush_back()関数、私は "範囲外"のエラーを取得、なぜですか?1つのスレッド読み取りと1つのスレッド書き込みは、std :: deque safeですか?

+0

'size()'の変数は各コアのレジスタに残っていると思いますか? 「volatile」を使うことで、「one read one write」という特定の状況の問題を解決できるか? – egraldlo

+0

いいえ、まだUBです。 –

+0

自己定義のキューを作成し、 'volatile(変数) '変数を使って' size() '関数を定義します。 – egraldlo

答えて

3

標準ライブラリオブジェクトで非constメンバ関数を呼び出すことはスレッドセーフではありません(特定の非const関数が他に書かれていない限り)。データ競合や未定義動作を防ぐために、オブジェクトへのアクセスを同期させる必要があります。

+1

両端キューに「at」関数を使用することも、かなり非効率的です。 –

関連する問題