1

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

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

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

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

4

2 回答 2

1

为什么不只拥有一个工作是与终端交互的线程呢?

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

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

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

于 2013-01-20T01:33:30.340 回答
0

您可以在终端上使用 fprintf。fprintf 负责处理并发问题,例如它会在写入输出设备之前在 stdout 上使用互斥锁。

于 2013-01-21T00:19:52.130 回答