【发布时间】:2016-08-29 08:52:42
【问题描述】:
我正在编写一个程序,它有一个写入线程和几个读取线程,用于写入/读取磁盘上的文件。我希望不会同时发生写/读。我发现了许多在写/读期间使用 pthread 互斥锁来保护内存阵列的示例,例如声明受保护的内存阵列易失性。
volatile int array[NUMBER];
pthread_mutex_t locks[NUMBER];
pthread_mutex_lock(&locks[index]);
array[acct] -= SOME_NUMBER;
pthread_mutex_unlock(&locks[index]);
但我找不到使用 pthread 保护磁盘上文件的示例。
volatile FILE* array[NUMBER]; ??
有人能指出我正确的方向吗?我希望写/读线程不会同时访问磁盘上的文件。
编辑:我阅读了更多内容,根据post,似乎多线程不适用于磁盘 IO。
【问题讨论】:
-
volatile部分与不同时访问无关。 -
正如已经在 SO 上无休止地争论的那样,volatile 不会使读/写成为原子操作,也不能用于重入目的。但是,最好将与回调共享的所有变量声明为 volatile,以防止错误的编译器对代码进行不正确的优化,这些编译器没有意识到回调中的代码可以随时执行。在某些情况下,volatile 还可以充当内存屏障。
标签: c multithreading file pthreads mutex