_nolock CRT-функции

Недавно я обнаружил существование функций _nolock, и меня удивляет, как мало информации я могу найти по ним. Он говорит, что увеличивает производительность, но я не могу найти ни одного эталона. В нем также говорится, что они могут использоваться в многопоточной программе, если программа имеет собственную блокировку, но что должно быть заблокировано? Должны ли все вызовы CRT проходить через одну и ту же блокировку? Один на функцию? Один на группу функций? Если так, что определяет группы?

Не могли бы вы указать мне некоторую подробную информацию об этих функциях? Спасибо:-)

2 ответа

Вам необходимо заблокировать доступ к файлу, если вы обращаетесь к нему из нескольких потоков. В противном случае один поток может написать прямо в середине другого. Попробуйте их, напечатав в stdio, чтобы увидеть эффекты.

Если вы перейдете по ссылкам на отдельные функции, вы увидите следующую строку:

Используйте эту функцию только в поточно-ориентированных контекстах, таких как однопоточные приложения или там, где вызывающая область уже обрабатывает изоляцию потока.

Единственный способ оценить разницу в производительности - создать небольшую программу и протестировать ее. Как указал monjardin, вам нужно заблокировать доступ к файлу, к которому вы обращаетесь, с помощью функции (если, как указано в документации, вы не находитесь в однопоточном окружении).

Другие вопросы по тегам