gpt4 book ai didi

我们可以获得信号量或条件变量的文件描述符吗?

转载 作者:太空狗 更新时间:2023-10-29 14:55:36 30 4
gpt4 key购买 nike

我有一个双向消息 channel 的实现,为了减少开销,我将其实现为几个循环消息缓冲区。要从一端写入另一端,您将指向消息的指针添加到一个循环缓冲区并调整其读写索引。要朝另一个方向写入,您可以对另一个缓冲区执行相同的操作,依此类推。代码小而简单,避免了使用管道或 fifo 的开销,尽管在某些方面这可能是更好的解决方案。

我通过简单地检查是否有等待读取的消息来实现对此的轮询,如果没有,则在条件变量上进行定时等待,当消息添加到相关数组时会发出信号。

现在我有一个应用程序需要同时等待套接字(或多或少)和消息 channel 。我现在希望我使用了 fifo 或管道,但由于更改代码的开销(长话短说),重写代码以使用 fifo 或管道并不可行。

有什么方法可以获取与条件变量关联的文件描述符吗?如果是这样,一次对两个文件描述符实现轮询会更容易,一个用于条件变量,一个用于套接字。

出于好奇,并使这个问题对其他有类似问题的人更有用,是否有可能获得与信号量关联的文件描述符,以便您可以同时轮询信号量和常规文件描述符?

最佳答案

一般不会。但是不同的操作系统针对您遇到的问题提供了不同的解决方案。

window

您可以使用 WSAEventSelect 将事件与套接字相关联并等待 WaitForMultipleObjectsEx对于套接字或互斥量或信号量事件等上的数据

Linux

您可以使用 futex带有 FUTEX_FD 参数的系统调用(然而这已从内核中删除),或使用 eventfd实现条件变量。

并且您可以生成第二个线程来等待条件变量,并向在 select() 中等待的线程发出信号。或者在套接字接收到输入时请求信号等。参见this related question .

关于我们可以获得信号量或条件变量的文件描述符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335667/

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