Я пытаюсь добавить (записать добавление) в файл из разных потоков (аналогично ведению журнала), поэтому межпроцессная блокировка не требуется.
Я изучил flock в fcntl.h, и он говорит, что flock может выполнять гранулированную блокировку вместе с межпроцессным взаимодействием, что в моей ситуации не требуется.
char* file = "newfile.txt";
int fd;
struct flock lock;
printf("opening %s\n", file);
fd = open(file, O_APPEND);
if (fd >= 0) {
memset(&lock, 0, sizeof (lock));
lock.l_type = F_WRLCK;
fcntl(fd, F_SETLKW, &lock);
//do my thing here
lock.l_type = F_UNLCK;
fcntl(fd, F_SETLKW, &lock);
close(fd);
}
Будут ли накладные расходы, поскольку он может выполнять гранулированную блокировку и блокировку между процессами? Что происходит, когда программа аварийно завершает работу при блокировке?
В настоящее время я предпочитаю мьютекс,
static std::mutex fileMutex;
fileMutex.lock();
//do my thing here
fileMutex.unlock();
Можно ли использовать мьютексный подход, поскольку синхронизация (или блокировка) необходима только внутри процесса (только многопоточность),
или можно реализовать код с flock в fcntl.h?