Лучший поточно-безопасный способ увеличения целого числа до 65535

У меня есть System.Timers.Timer, который увеличивает счетчик каждые 3 секунды. Другой поток также может установить для этой переменной любое значение при определенных условиях.

Пытался использовать Interlocked.Increment , но у него нет перегрузки для UInt16. Следующее, что нужно помнить, - это lock , но я не совсем уверен, как сделать потокобезопасный доступ (чтение / запись / приращение) к этой переменной.

Отредактировано: код изначально использовал int, но был изменен на UInt16, как было предложено

private volatile System.UInt16 mCounter = 0;
private readonly object mCounterLock = new object();
public System.UInt16 Counter {
  get {
    lock (mCounterLock) {
      return mCounter;
    }
  }
  set {
    lock (mCounterLock) {
      mCounter = value;
    }
  }
}
private System.Timers.Timer mCounterTimer;

void mCounter_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
  lock (mCounterLock) {
    Counter++;
  }
}
12
задан jalf 2 January 2012 в 08:19
поделиться