gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:49 25 4
gpt4 key购买 nike

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

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

pthread_mutex_lock(&locks[index]);
array[acct] -= SOME_NUMBER;
pthread_mutex_unlock(&locks[index]);

但是我找不到使用 pthreads 来保护磁盘文件的例子。

volatile FILE* array[NUMBER]; ??

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

编辑:我看多了,根据这个post ,似乎多线程不适用于磁盘 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);

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

关于c - 如何在 C 中使用 pthread 来防止同时读取和写入磁盘上的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com