如何在C中使用pthread来防止同时读写磁盘上的文件?

Pip*_*ppi 0 c multithreading mutex file pthreads

我正在编写一个程序,它有一个写入线程和几个读取线程,用于写入/读取磁盘上的文件。我希望写入/读取不会同时发生。我发现了很多使用pthread互斥锁在写入/读取期间保护内存阵列的示例,例如将受保护的内存数组声明为易失性。

volatile int array[NUMBER];
pthread_mutex_t locks[NUMBER];

pthread_mutex_lock(&locks[index]);
array[acct] -= SOME_NUMBER;
pthread_mutex_unlock(&locks[index]);
Run Code Online (Sandbox Code Playgroud)

但我找不到使用 pthread 保护磁盘上文件的示例。

volatile FILE* array[NUMBER]; ??
Run Code Online (Sandbox Code Playgroud)

有人能指出我正确的方向吗?我希望写/读线程不会同时访问磁盘上的文件。

编辑:我阅读了更多内容,根据这篇文章,多线程似乎不适用于磁盘 IO。

flu*_*ter 5

根据描述,您的问题是关于保护磁盘上的文件,而不是FILE*代表文件的流描述符()。可以尝试使用pthread的rwlock来同步多个线程之间的并发访问:

FILE *fp = fopen(...);
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;

// read thread:
char buf[BUFLEN];
pthread_rwlock_rdlock(&rwlock);
fread(buf, sizeof buf, 1, fp);
pthread_rwlock_unlock(&rwlock);

// write thread:
pthread_rwlock_wrlock(&rwlock);
fwrite(buf, sizeof buf, 1, fp);
pthread_rwlock_unlock(&rwlock);
Run Code Online (Sandbox Code Playgroud)

请注意,这可以保护文件不被同一进程中的多个线程访问,但这并不能保护它不被系统上的多个进程访问。