“Ссылку на энергозависимое поле не будут рассматривать как энергозависимые” последствия

function compareArrays(arrayA, arrayB) {
    if (arrayA.length != arrayB.length) return true;
    for (i = 0; i < arrayA.length; i++)
        if (arrayB.indexOf(arrayA[i]) == -1) {
            return true;
        }
    }
    for (i = 0; i < arrayB.length; i++) {
        if (arrayA.indexOf(arrayB[i]) == -1) {
            return true;
        }
    }
    return false;
}
42
задан Jader Dias 9 January 2009 в 03:24
поделиться

4 ответа

Вы не делаете ничего плохого. Согласно документация :

А энергозависимое поле не должно обычно передаваться с помощью касательно или параметр, так как это не будут рассматривать как энергозависимое в рамках функции. Существуют исключения к этому, такому, называя взаимно блокируемый API.

44
ответ дан Darin Dimitrov 4 August 2019 в 19:17
поделиться

Вы получаете ошибку, потому что Вы передаете поле ссылкой. Я думаю, что это означает, то, что целевой метод понятия не имеет, что поле отмечено как volatile, и поэтому не будет рассматривать его как таковой.

3
ответ дан Tim Cooper 4 August 2019 в 19:17
поделиться

В основном предупреждение состоит в том, что при передаче энергозависимого поля ссылкой код вызова не знает для обработки ее энергозависимым способом. Для Взаимно блокируемого. Инкремент, который, вероятно, не имеет значения, из-за природы метода - но тогда Вам не нужна переменная, чтобы быть энергозависимы так или иначе , если Вы используете, Взаимно блокировался.

В целом, я думаю, что постарался бы не смешивать два - если Вы используете, Взаимно блокировался, сделайте это везде (использование Interlocked.CompareExchange(ref counter, 0, 0) для чтения его). Я не могу сказать, что использую энергозависимый очень часто, лично. Для простых счетчиков I мог бы Взаимно блокируемое использование, но я, более вероятно, буду использовать блокировку для большинства задач.

30
ответ дан Jon Skeet 4 August 2019 в 19:17
поделиться

Используйте это :

        #pragma warning disable 420
        //                       M
        //                      dM
        //                      MMr
        //                     4MMML                  .
        //                     MMMMM.                xf
        //     .              "MMMMM               .MM-
        //      Mh..          +MMMMMM            .MMMM
        //      .MMM.         .MMMMML.          MMMMMh
        //       )MMMh.        MMMMMM         MMMMMMM
        //        3MMMMx.     'MMMMMMf      xnMMMMMM"
        //        '*MMMMM      MMMMMM.     nMMMMMMP"
        //          *MMMMMx    "MMMMM\    .MMMMMMM=
        //           *MMMMMh   "MMMMM"   JMMMMMMP
        //             MMMMMM   3MMMM.  dMMMMMM            .
        //              MMMMMM  "MMMM  .MMMMM(        .nnMP"
        //  =..          *MMMMx  MMM"  dMMMM"    .nnMMMMM*
        //    "MMn...     'MMMMr 'MM   MMM"   .nMMMMMMM*"
        //     "4MMMMnn..   *MMM  MM  MMP"  .dMMMMMMM""
        //       ^MMMMMMMMx.  *ML "M .M*  .MMMMMM**"
        //          *PMMMMMMhn. *x > M  .MMMM**""
        //             ""**MMMMhx/.h/ .=*"
        //                      .3P"%....
        //                    nP"     "*MMnx
        if(Interlocked.CompareExchange(ref isLoaded, 1, 0) != 0)
            return;
        #pragma warning restore 420
30
ответ дан 26 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

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