Здравствуйте, ·, Вы писали:
·>Здравствуйте, mrTwister, Вы писали:
T>>Ну представь для простоты, что у тебя в пуле один поток. И мы используем один этот поток, чтобы конкурентно выполнять несколько кусков работы "процессов". Это можно сделать через async\await, разбив работу на таски и выстроив таски в цепочку. В этом случае получаем кооперативную многозадачность, так как таска должна добровольно отпустить поток, чтобы дать возможность конкурентному "процессу" продвинуться, выполнив свою таску. ·>Это эквивалентно одному локу. Пока кто-то держит лок, другие ждут.
T>>Тут стандартные проблемы: если таска ведет себя плохо, отказывается кооперироваться и не отдает поток, то все конкурентные процессы останавливаются. ·>Если таска ведёт себя плохо и не отпускает лок, то все конкурентные процессы останавливаются.
·>В чём разница-то?
Мьютекс сам по себе не позволит тебе конкурентно выполнять несколько "просессов" на одном потоке. Тебе нужно разбивать "процессы" на подзадачи, строить цепочки таскок и переключаться между ними.