Как мне узнать, является ли этот метод C # потокобезопасным? - PullRequest
48 голосов
/ 07 января 2009

Я работаю над созданием функции обратного вызова для события удаления элемента кэша ASP.NET.

В документации сказано, что я должен вызывать метод для объекта или вызовы, которые, как я знаю, будут (будут в области видимости), такие как статический метод, но в нем говорится, что я должен убедиться, что статический поток безопасен.

Часть 1. Какие примеры того, что я мог бы сделать, чтобы сделать его безопасным от потоков?

Часть 2. Означает ли это, что если у меня есть

static int addOne(int someNumber){
    int foo = someNumber;
    return foo +1; 
}

и я вызываю Class.addOne (5); и Class.addOne (6); Одновременно, могу ли я получить 6 или 7 возвращенных в зависимости от того, кто какой вызов устанавливает foo первым? (то есть состояние гонки)

Ответы [ 11 ]

0 голосов
/ 07 января 2009

любой доступ к объекту, который может использоваться одновременно двумя потоками, не является потокобезопасным.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...