gpt4 book ai didi

c++ - C++ select() 函数如何在 Unix 操作系统中工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:19 24 4
gpt4 key购买 nike

我已经使用select() 函数来实现服务器,但现在我必须自己实现它(作为项目的一部分)。

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

谁能帮我实现这个功能?任何来源,文章?谁能解释该功能中发生了什么?

最佳答案

select 是操作系统原语。它不能使用其他可移植结构(例如 pthreads)来实现。

您可以将其视为 pthread_cond_wait 的不同专业版本,它接收与条件变量关联的信号。 pthread_cond_wait 暂停当前线程,直到收到信号,然后(可选)验证信号是否与适当的互斥体相关联,然后获取互斥体,然后继续。 select 接收信号,确认(或至少保证)它的接收,并传递信息。它还处理在调用之前收到的信号。

因此,pthread_cond_wait 在实现方面并不是真正的原始;它的设计在语义上非常安全。这就是 pthreads 的精神,无论好坏。各种库中可用的原子变量为同步作业的 pthreads 提供了一种不安全的原始实现替代方案,但信号涉及调度和取消调度线程,这是非常特定于平台的。 (嗯,转念一想,我想你可以用自旋锁实现 select。我一想到这个就不寒而栗。)

不过,这是一个很好的练习。

关于c++ - C++ select() 函数如何在 Unix 操作系统中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838112/

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