gpt4 book ai didi

c - 使用 pthreads 从终端写入和读取

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

我想使用 pthreads 在 C 中创建一个多线程应用程序。我想让一些工作线程在后台做一些事情,但每隔一段时间,他们就必须向终端打印一些东西,所以我想他们必须

  • “获取输出设备”(在本例中为 stdout)
  • 写信给它
  • 释放输出设备
  • 冲洗并重复。

此外,我希望用户能够“回复”输出。为了简单起见,我假设在用户对线程的输出给出答案之前不会向终端写入任何新内容,因此新行仅在用户回复后写入,等等。我已经阅读了在等待终端上的用户输入时,似乎 ncurses 是解决此问题的方法。

但是,现在我了解到 ncurses 不是线程安全的,我不确定如何继续。我想我可以用互斥体包装所有与终端相关的东西,但在我这样做之前,我想知道是否有更聪明、可能更方便的方法来解决这个问题,也许是带有条件变量的解决方案?我在这里有点迷路,所以欢迎任何帮助。

最佳答案

为什么不只使用一个线程来与终端交互呢?

如果其他线程想要发送消息或从终端获得回复,它们可以创建一个反射(reflect)该请求的结构,获取互斥量,并将该结构添加到链表 if 结构中。终端线程将遍历链表,根据需要输出数据并根据需要获得回复。

您可以使用条件变量向终端线程发出信号,表明现在有数据需要输出。链表中的结构可以包括一个响应条件变量,终端线程可以在收到回复时发出信号,如果有的话。

对于没有得到回复的输出,终端线程可以在输出其内容后删除该结构。对于获得回复的输出,终端线程可以向对输出感兴趣的线程发出信号,然后让该线程在复制输出后删除结构。

关于c - 使用 pthreads 从终端写入和读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420805/

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