В C++ меня учат использовать ключевое слово volatile для переменной (myVar), которое используется из разных потоков даже в критической секции. Но для C# я читал в MSDN эту странную фразу: «Модификатор volatile обычно используется для поля, к которому обращаются несколько потоков, не используя оператор блокировки для сериализации доступа». Имеет ли эта фраза, что если я под замком, вам не нужно использовать ключевое слово volatile? Если да, то еще один вопрос: может быть, я должен заблокировать эту переменную (myVar)?volatile ключевое слово в C# и C++
Object a = new Object();
double i,k;
Thread1()
{
lock(a)
{
i++;// using variable i.
k++;// using variable k.
}
}
Thread2 сделать то же самое. Безопасно, что я и к не летучий, или я должен сделать так ?:
lock(i)
{
i++;// using variable i.
}
lock(k)
{
k++;// using variable k.
}
Дубликат http://stackoverflow.com/a/1682309/2958164 –
начните с [старого блога Эрика Липперта] (http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/ atomicity-volatility-and-immutability-are-different-part-three.aspx) – Mgetz
Узнайте, что на самом деле делает 'volatile' на C++ (http://stackoverflow.com/questions/6866206/volatile-and-createthread/6866927# 6866927). Очень отличается от вашего понимания. Его полезность ограничена. –