Как синхронизировать запись в файл из нескольких потоков - PullRequest
0 голосов
/ 06 февраля 2020

Привет, у меня есть следующая проблема: у меня есть какая-то функция «Регистрация», которая пишет в файл, который вызывается из insied потока, так что программа ведет себя так:

                        main()
                         |
        ----------------------------------------
        |                 |                    |                  
       *thread 1       *thread2             *thread3
        |                 |                    |
      Register           Register            Register  
        |                 |                    |
        ----------------------------------------
                          |
                       sameFile

Теперь проблема заключается в следующем: Могу ли я использовать мьютекс внутри критической части функции реестра (проверьте, записан ли уже пользователь в файл, а затем запишите в файл), даже если функция регистрации сама по себе не является потоком, но она вызывается потоком? Или я должен использовать мьютекс в потоке перед вызовом функции Register?

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете использовать мьютекс везде, где это имеет смысл.

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

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

...