Статические инициализаторы и синхронизация потока (.NET)

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC") ("DEF")
1
задан James McMahon 10 August 2009 в 15:34
поделиться

4 ответа

Выполнение статического конструктора запускается первым из следующих событий, происходящих в домене приложения:

  • Создается экземпляр класса.
  • Любое из статических упоминаются члены класса

Ответственность за обработку проблем параллелизма при вызове статических конструкторов должна лежать на загрузчике класса.

1
ответ дан 3 September 2019 в 01:13
поделиться

Я не думаю, что есть много споров. Инициализаторы запускаются при загрузке класса. Если класс уже загружен, то никаких проверок не требуется.

1
ответ дан 3 September 2019 в 01:13
поделиться

В спецификации сказано, что «выполняется во время, зависящее от реализации, до первого использования статического поля этого класса».

Таким образом, можно предположить (или надеяться, если вы re пессимистично), что реализация поняла, что им нужно заботиться о синхронизации потоков.

0
ответ дан 3 September 2019 в 01:13
поделиться

Я считаю, что это работает как часть JIT-компиляции. После того, как статический инициализатор был запущен и запущен, ему больше не нужно запускать его и, следовательно, нет проблем синхронизации с несколькими потоками. И, конечно же, JIT-движок будет потокобезопасным.

Ник.

0
ответ дан 3 September 2019 в 01:13
поделиться
Другие вопросы по тегам:

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