Проблема в основном в том, что пока вы спите, вы ничего не делаете.В общем, вы хотите быть «в» критическом разделе как можно меньше времени.Чем дольше вы проводите в критическом разделе, тем дольше любому другому потоку придется ждать, чтобы войти в него.
Ввод-вывод почти наверняка должен выполняться вне любого критического раздела, как правило.Например, если вы читаете некоторые данные, вам нужно прочитать данные, затем войти в критическую секцию и добавить данные в некоторую структуру, чтобы все остальные могли ее видеть (например, добавить узел с указателем на него).данные в вектор), а затем покинуть CS.
Почти никогда нет веских причин для выполнения самого ввода-вывода в CS - обычно для ввода-вывода достаточно одного потока,и иметь очередь (или deque, или что-то еще) для обработки ввода или вывода из этого потока.Добавление чего-либо или чтение чего-либо из очереди защищено CS (или, возможно, семафором и т. Д.), Но происходит быстро , поэтому один поток может сделать свое дело, а затем быстро уйти с пути, чтобы другие потокиможет также.