Как правильно заблокировать тип значения?

13
задан lc. 8 January 2009 в 01:53
поделиться

4 ответа

Используйте другой объект для блокировки.

int valueType;
object valueTypeLock = new object();

void Foo()
{
    lock (valueTypeLock)
    {
        valueType = 0;
    }
}
16
ответ дан Jon B 8 January 2009 в 01:53
поделиться

Зависьте от своей ситуации, Вы смогли избегать использования блокировок путем усиления Системы. Поточная обработка. Взаимно блокируемый тот же код в примере Jon становится:

System.Threading.Interlocked.Exchange(valueType,0)
1
ответ дан Tim Cooper 8 January 2009 в 01:53
поделиться
  • 1
    @Martin B: Я don' t соглашаются, что это - вопрос о начальном уровне - на самом деле были намного более очевидные вопросы, которые задают в прошлом теперь со многими голосами. Однако люди могли бы чувствовать you' ре, просто пытаясь получить репутацию себя. Окольный путь это должно отметить один или оба из вопроса/ответа как " сообщество wiki". лично I' d идут с вопросом как Вы и ответ как сообщество. Если вопрос имеет заслугу тогда you' ll получают ROI. – Richard Corden 31 July 2009 в 20:35

Ваш вопрос сформулирован таким способом, которым он предлагает мне, чтобы Вы не полностью понимали блокировку. Вы не блокируете данные, Вы блокируете для защиты целостности данных. Объект, который Вы соединяете, несуществен. То, что имеет значение, - то, что Вы соединяете тот же объект в других областях Вашего кода, которые изменяют защищаемые данные.

14
ответ дан Tim Cooper 8 January 2009 в 01:53
поделиться

Я всегда использую отдельную переменную для соединений:

object syncObj = new object();

void Foo()
{
  lock(syncObj)
  {
    // do some stuff
  }
}

Соединяющиеся типы значения не имеют смысла так или иначе, потому что типы значения неизменны и не могут быть изменены. Соединение 'этого' также проблематично, потому что 'это' видимо к внешнему миру.

Для некоторой информации о том, как Монитор был первоначально предназначен, чтобы использоваться, см. Монитор (синхронизация)

0
ответ дан Thomas Danecker 8 January 2009 в 01:53
поделиться
  • 1
    Большинство этих комментариев действительно старо, но возможно это - полезная обратная связь: Я нашел этот ответ как высокопоставленный результат поиска Google " пространство имен C++ alias". я didn' t знают, существовала ли такая вещь и надеялась, что была техника для сокращения пространств имен в конкретном объеме. Возможно, мой запрос был необычно удачен, но точка... Я поразил этот вопрос в ТАК, не зная ответ. – cheshirekow 21 February 2012 в 05:09
Другие вопросы по тегам:

Похожие вопросы: