русский
Germany.ruForen → Архив Досок→ Programmierung

Используете уникальные идентификаторы для объектов?

03.11.24 19:48
Re: Используете уникальные идентификаторы для объектов?
 
alex445 патриот
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.

В этом долбаном Сишарпе даже чтение и присвоение могут не быть атомарными. Короче, всё потенциально многопоточное надо заворачивать в запирания.

 

Sprung zu