Должен ли "private readonly int" быть безопасным для потоков при использовании в многопоточном приложении? - PullRequest
0 голосов
/ 05 июня 2018

В моем многопоточном приложении у меня есть класс, содержащий переменную экземпляра private readonly, которая инициализируется в конструкторе случайным числом.

class MyClass
{
  private readonly int randomNumber;


  public MyClass()
  {
    randomNumber = new Random().Next();
  }

  // Is called by different threads
  public int getRandomNumber()
  {
   return randomNumber;
  }
}

В приложении getRandomNumber() вызывается несколькимипотоки.Должен ли я предпринять какие-либо меры предосторожности в отношении безопасности потоков?

В качестве дополнительного вопроса: что изменится в отношении моих опасений, связанных с безопасностью угроз, когда я сделаю переменную статической и инициализирую ее при таком объявлении?

class MyClass
{
  private static readonly int randomNumber = new Random().Next();

  ...
}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Да - никакой другой код не может увидеть объект до того, как он полностью сконструирован.

Примечание:

  1. Мы должны позаботиться о том, чтобы мы выполняли построение цепочек конструкторов.
  2. Кроме того, это зависит от типа, дляНапример, для словаря, доступного только для чтения, мы можем выполнять определенные операции со значением ключа
0 голосов
/ 05 июня 2018

Меры предосторожности требуются только в случае как чтения, так и записи, но поскольку ваша переменная доступна только для чтения, я думаю, что нет необходимости в каких-либо мерах предосторожности в любом случае, будь то многопоточность или однопоточность.

...