Login
Используете уникальные идентификаторы для объектов?
1559 просмотров
Перейти к просмотру всей ветки
in Antwort NightWatch 03.11.24 16:10, Zuletzt geändert 03.11.24 19:52 (alex445)
internal class Program { private static ulong idCounter = 0; static void Main(string[] args) { Task[] tasks = new Task[10]; for (int j = 0; j < tasks.Length; j++) { tasks[j] = Task.Factory.StartNew(Increment); } Task.WaitAll(tasks); Debug.WriteLine($"Counter: {idCounter}"); } private static void Increment() { for (int i = 0; i < 10000; i++) { idCounter++; } } }
Да... Да, это не атомарно. Обманули! Пишут будто одну операцию, а сами сокращают i = i + 1.
В этом долбаном Сишарпе даже чтение и присвоение могут не быть атомарными. Короче, всё потенциально многопоточное надо заворачивать в запирания.