Я пытаюсь добавить (записать приложение) в файл из разных потоков (аналогично протоколированию), и поэтому нет необходимости в блокировке между процессами.C++ - mutex или flock fcntl.h для блокировки только операции записи
Я изучил стадо в fcntl.h, и он говорит, что стая может выполнять гранулированный замок вместе с межпроцессом, который не нужен в моей ситуации.
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?
открыт в режиме O_APPEND! –