我想使用pthreads在C中创建一个多线程应用程序。我希望有一些工作线程在后台做东西,但每隔一段时间,他们就不得不在终端上打印一些东西,所以我想他们必须
另外,我希望用户能够“回复”输出。为了简单起见,我将假设在用户给出线程输出的答案之前不会向终端写入任何新内容,因此新行仅在用户回复后写入,等等。我已经阅读了等待终端上的用户输入,似乎ncurses是这样做的方法。
但是,现在我已经读过ncurses不是线程安全的,我不确定如何继续。我想我可以用与互斥量相关的所有终端相关的东西,但在我这样做之前,我想知道是否有一个更聪明,可能更方便的方法来解决这个问题,也许是条件变量的解决方案?我有点迷失在这里,所以欢迎任何帮助。
答案 0 :(得分:1)
为什么不只有一个线程,其职责是与终端进行交互?
如果其他线程想要发送消息或从终端获得回复,他们可以创建反映该请求的结构,获取互斥锁,并将该结构添加到链接列表(如果是结构)。终端线程将遍历链表,根据需要输出数据并根据需要获得回复。
您可以使用条件变量向终端线程发信号通知现在需要输出数据。链表中的结构可以包含一个响应条件变量,终端线程在有回复时可以发出信号(如果有的话)。
对于没有回复的输出,终端线程可以在输出其内容后删除该结构。对于获得回复的输出,终端线程可以发信号通知对输出感兴趣的线程,然后让该线程在复制输出后删除该结构。
答案 1 :(得分:0)
您可以在终端上使用fprintf。 fprintf负责处理并发问题,比如在写入输出设备之前它会在stdout上使用互斥锁。