Потокобезопасный способ иметь уникальные последовательные значения - PullRequest
3 голосов
/ 21 июня 2011

У меня есть такой код:

static volatile int i = 0;
static void Foo() {
int myInt = i++;
// now use myInt
}

Мне нужно, чтобы каждое значение myInt было уникальным и последовательным. Например, если будет запущено 5 таких потоков, они должны иметь значения myInt 0, 1, 2, 3, 4 (порядок не важен).

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

1 Ответ

6 голосов
/ 21 июня 2011

Для безопасности потоков используйте Interlocked.Increment () :

Увеличивает указанную переменную и сохраняет результат, как атомный работа.

    int MyInt = Interlocked.Increment(ref i);

[... и нет никаких оснований помечать их как volatile, что несколько нарушено и может быть исключено / удалено в будущих версиях C # ...]

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