Надеюсь, я правильно понял ваш вопрос: когда кто-то хочет записать в ваш файл proc, вы устанавливаете переменную с именем flag в 1, а также сохраняете current-> pid в глобальной переменной. Затем, когда вызывается любая точка входа close (), вы проверяете current-> pid экземпляра close () и сравниваете его с сохраненным значением. Если это соответствует, вы выключаете флаг. Правильно ?
Рассмотрим следующую ситуацию: процесс A хочет выполнить запись в ваш ресурс proc, и поэтому вы проверяете обратный вызов разрешения. Вы видите, что флаг равен 0, поэтому вы можете установить его на 1 для процесса А. Но в этот момент планировщик обнаруживает, что процесс А израсходовал свою долю времени, и выбирает другой процесс для запуска (флаг по-прежнему равен o!). Через некоторое время появляется процесс B, желающий также записать в ваш ресурс proc, проверяет, что флаг равен 0, устанавливает его в 1, а затем приступает к записи в файл. К сожалению, в данный момент процесс А запланирован для повторного запуска, и, поскольку он считает, что флаг равен 0 (запомните, до того, как планировщик его опередил, флаг был равен 0), он устанавливает его в 1 и выполняет запись в файл. Конечный результат: данные в вашем ресурсе proc повреждены.
Вы должны использовать хороший механизм блокировки, предоставляемый ядром для этого типа операций и исходя из ваших требований, я думаю, что RCU является лучшим: посмотрите на механизм блокировки RCU