Пока я читал о ReaderWriterLockSlim
механизме блокировки, был один парень, который предположил, что Interlock
функции можно использовать для более тонкой блокировки
Кроме того, я нашел здесь еще один ответ от Марка:
... Записи вносят свои изменения в клонированную копию, а затем используют Interlocked.CompareExchange для замены ссылки (повторно применяя свои изменения, если другой поток изменил ссылку в промежутке).
Ну, в настоящее время все, что я знаю об объекте Interlocked
, это то, что он используется (в многопоточной среде) для выполнения атомарных операций additions
, compare
, compareExchange
. (и я знаю, как им пользоваться)
Но (и вот мой вопрос) —
Вопрос
Как я могу использовать его как замок? (пример кода будет высоко оценен)
редактировать
Для простоты я вставляю этот код (который не является потокобезопасным — если бы Go
вызывался двумя потоками одновременно, можно было бы получить ошибку деления на ноль):
class ThreadUnsafe
{
static int _val1 = 1, _val2 = 1;
static void Go()
{
if (_val2 != 0) Console.WriteLine (_val1 / _val2);
_val2 = 0;
}
}
Как я могу использовать Interlock для замены замка (что решило бы проблему)?
lock(){}
. - person Henk Holterman   schedule 24.05.2014