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。
根据描述,您的问题是关于保护磁盘上的文件,而不是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)
请注意,这可以保护文件不被同一进程中的多个线程访问,但这并不能保护它不被系统上的多个进程访问。