【发布时间】:2014-03-13 00:31:07
【问题描述】:
我有一个名为“data.txt”的文件。
我有两个线程。
第一个线程,读取文件的全部内容:
while(1){
char buf[1000];
FILE* fp = fopen("data.txt","r");
while(fread(buf,1,1000,fp)>0){
/* process data */
}
fclose(fp);
}
第二个线程将数据追加到文件中:
while(1){
FILE* fp = fopen("data.txt","a");
fwrite("hello\n",1,6,fp);
fclose(fp);
}
在这种情况下读写(WHITOUT any MUTEX or FILELOCKING)是线程安全的吗? (没有分段错误等...)
【问题讨论】:
-
我可能错了,但我相信 POSIX 只指定操作系统接口,而不是 C 库。因此,如果 fwrite 和 fread 是线程安全的,POSIX 不知道。它确实指定 read() 和 write() 是线程安全的。
-
我怀疑你会崩溃,但我也怀疑你的阅读线程从文件中读取的数据会特别明确。特别是,如果您希望文件表现得像 FIFO 管道(线程 2 写入的每个字节稍后都会按顺序由线程 1 读取),您可能会感到失望。
-
你试过了吗?它应该很容易证明它不安全。
-
感谢您的回复。在 windows 和 Fedora 上,根本没有分段错误。所以我认为它是线程安全的......
-
没有分段错误并不意味着线程安全。
标签: c multithreading posix