【发布时间】:2021-03-22 19:23:38
【问题描述】:
fd = open("file", O_RDONLY);
if (fd < 0) exit(1);
while((res = read(fd, buf, sizeof(buf)))){
if (res < 0){
close(fd);
fprintf(stderr, "Read error!\n");
break;
} else {
printf("Read %zd bytes\n", res);
}
}
close (fd);
在单线程程序中,这是一个明显的错误:'fd' 被关闭了两次。这个错误对多线程程序有什么影响?
【问题讨论】:
-
与单线程程序没有什么不同:第二次 close() 调用将失败...
-
@prog-fh 如果另一个线程在两个
close调用之间打开一个文件或套接字并获得相同的描述符怎么办? -
@DavidSchwartz 如果它以任何方式打开相同的资源(使用
dup()),那么关闭调用将使第一个文件描述符不可用但相同的资源其他文件描述符仍可访问。但是这两个关闭调用不适用于同一个文件描述符。啊...好吧,我明白了,您是在谈论竞争条件...好吧,任何事情都可能发生,那么为什么要针对这个问题呢? -
@prog-fh 对。此代码可能是与 any 其他 any 其他线程可能正在运行的其他代码的竞争条件的一半。谁知道那个比赛条件会做什么?
标签: filesystems c multithreading