Даже при наличии довольно критической секции код, вероятно, будет иметь ужасную производительность, потому что, если критическая секция удерживается в течение длительных периодов времени, потоки будут часто ждать ее.
Так что яЯ бы посоветовал вам попытаться реструктурировать код, чтобы он не блокировал критические разделы в течение продолжительного времени.Либо с использованием другого подхода в целом (часто рекомендуется передавать объекты через очередь сообщений, потому что это легко сделать правильно), либо, по крайней мере, делая большую часть вычислений для локальных переменных, не удерживая блокировку, а затем просто применяя блокировку для сохранения результатов.Если блокировка удерживается в течение более коротких периодов времени, потоки будут тратить меньше времени на ее ожидание, что, как правило, повышает производительность и делает беспристрастность беспроблемной.Вы также можете попытаться увеличить степень детализации блокировки (блокировать меньшие объекты отдельно), что также уменьшит конкуренцию.
Редактировать: Хорошо, подумав, я думаю, каждые критический раздел в Linux примерно честен.Всякий раз, когда есть спящие, операция разблокировки должна войти в ядро, чтобы заставить его разбудить их.Во время возврата из ядра планировщик запускается и выбирает процесс с самым высоким приоритетом.При ожидании приоритеты шпал повышаются, поэтому в какой-то момент они будут достаточно высокими, чтобы при отпускании возникла задача.