异步控制台输入冻结了以前的输入 C

Asynchronous console input froze previous input C

本文关键字:输入 冻结 异步控制 控制台 异步 结了      更新时间:2023-10-16

我想编写具有3个线程(main,reader,writer)的简单程序。阅读器线程是这样的:

char message[128];
while (1) {
    std::cin >> message;
}

主线程捕获Ctrl+Z操作,然后用户按此控件,然后我想显示简单的选择,例如Do you want finish? (Y/N) __ __ std::cin操作的位置。现在我有这样的东西:

void signal_handler(int signal) {
    char finish;
    std::cout << "Do you want finish? (Y/N)";
    std::cin >> finish;
}
int main(void) {
    signal(20, signal_handler);
    ...

但是当我发送简单Y时,起初将转到阅读器线程,现在当我发送Y时将转到主线程。如何将标准定向到主线程?

标准 IO(std::cin包装)不是线程感知的。

多线程应用程序有责任以合理的方式处理其资源。

一种方法是让单个线程负责读取 STDIN 并推送到由一些多线程感知抽象代码控制的内存队列。然后,根据程序逻辑的要求将该资源"锁定"到所需的线程。