gpt4 book ai didi

c - accept() 是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 16:41:06 26 4
gpt4 key购买 nike

我目前正在为我正在学习的类(class)用 C 语言编写一个简单的网络服务器。我们的一个要求是实现一个线程池来处理使用 pthreads 的连接。

我知道我将如何粗略地执行此操作(在主线程中调用 accept 并将文件描述符传递给空闲线程),但是我的 friend 建议了一种替代方法而不是我想到的方法:创建我的所有线程在前面,让他们都在接受电话时永远循环。这个想法是 accept 将阻塞所有空闲线程,并且当连接进入时,只将文件描述符提供给一个线程。然后,当给定线程完成连接时,它会循环回来并阻塞再次接受的调用。本质上将对 accept() 的调用用作信号量。他认为这会大大简化实现,因为您不需要跟踪哪些线程正忙,哪些线程已准备好进行连接。理论上它也会有更低的延迟,因为线程可以立即开始执行。

我的问题是,这样安全吗?我打算实现并尝试一下,但我还没有准备好,我很想知道答案。我在 google 和 stackoverflow 上搜索过,但找不到任何人这样做。接受线程安全吗?我假设这种方法会有更多的开销,因为您一直在运行所有线程,这两种方法只是简单的内存/延迟权衡吗?

编辑:我不确定这是否应该是社区维基,如果应该的话,我深表歉意,我找不到按钮:P

最佳答案

是的。这是设计多线程服务器和公认设计实践的常用方法。

您还可以多次fork 并让子进程调用accept,这样您就可以在不需要线程库的情况下进行多线程处理。较旧的服务器执行此操作。

关于c - accept() 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124320/

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