gpt4 book ai didi

在多线程程序中关闭文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:48 29 4
gpt4 key购买 nike

我创建了一个线程来接受传入连接:

pthread_t thread;

pthread_create(&thread, NULL, worker_func, NULL);
pthread_detach(thread);

然后 worker_func 做:

<snip>
fd = accept(GlobalFD, NULL, NULL);
<snip>

但是,如果我尝试在我的原始线程中关闭 GlobalFD,accept 仍然会阻塞(我希望它在 GlobalFD 关闭时失败)。我在网上查看过其他问题,但似乎找不到我的特定问题的答案。

有什么想法吗?谢谢

最佳答案

同一个程序的不同线程共享内存,包括文件描述符表。如果一个线程关闭了一个 FD,那么它对所有其他线程也关闭了。这是使用多线程和使用多进程的区别之一。因此,不要让一个线程关闭另一个线程赖以保持打开状态的文件描述符。

但是,更一般地说,您必须非常小心地修改共享数据。一般来说,您必须通过信号量、条件变量或其他一些对同步具有重要意义的构造或操作来同步访问。程序行为在其他方面没有明确定义。特别是,您不能期望关闭文件描述符会导致在不同线程中运行的事件 I/O 函数终止。改为向目标线程发送信号。

关于在多线程程序中关闭文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545952/

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