C++ 11の新しいスレッディングと少し混乱しています。私はmutexを使って2つのスレッドが同時に同じデータを操作するのを止めることができますが、そのデータに代入するのはどうですか?C++ 11スタック変数を使用したスレッドセーフ
例!
class Foo
{
std::string s;
// This would be called on a seperate thread
void Bar() { s = std::string("blah blah blah"); }
};
、その場合、私はちょうど、だから私はSに何かを割り当てるてるので、私は何を求めていること、である、メンバ変数は、常に同じメモリ位置にとどまるsはない、との割り当ては、単に内部データを変更しますミューテックスが必要ですか?または、キャッシュされた値と状況で、まだ最新のデータを持っていることを確認するために、アトミック<>を使用する必要があることを意味しますか?それとも、intやstructsのような型の場合だけですか?
* read *と呼ばれるメソッドで*書き込まれる*オブジェクトの読み込み時に壊れるオブジェクトはありませんか?別の可能性がある場合、私はそれを見てうれしいです。 –
正確に。操作は論理的には読み取り操作ですが、物理的な書き込み操作を含みます。 (たとえば、GetValueOfParameter(std :: string paramName)のような操作を考えてください。パラメータがメモリにない場合は、SQLデータベースから読み込みます。あなたが求めた情報を見つけるために横断中に、見つかった「期限切れの」オブジェクトを削除します。 –
'std :: map :: operator []'、呼び出し側が書き込み操作であることを忘れてしまうのは簡単です。私は、「彼らがそうであるように見えても、純粋な読み込みではないため、外部同期が必要な操作を文書化しなければならない」というように、「それらを作ってはいけない」とは言いません。 –