c - 多线程程序 : waiting on input

标签 c multithreading

我们正在创建一个点对点程序(在 c 中),我们正在使用多个线程,以便该程序可以监听新连接并接收/发送数据。

问题是,我记得我的教授告诉我们,如果你有多个线程在同一个进程上运行,如果一个线程必须等待用户输入,整个进程就会“停止”,所以其他线程都不会继续运行.

但后来我们一直在阅读,似乎如果一个线程正在等待输入,其他线程将照常运行......

哪个是对的?如果我们让程序在一个线程上等待用户输入(你知道,比如连接到 X 或向 X 发送消息),而另一个线程只是坐在那儿无限循环等待对等点尝试连接,它是否仍然正在监听连接?

谢谢!希望这是有道理的......线程是如此困惑:(

最佳答案

是的,在大多数现代操作系统上,一个进程中的多个线程可以等待输入(来自 stdin、来自套接字等),而其他线程可以工作。

考虑您的浏览器。当您上网时,当您等待页面加载时,用户界面不会卡住(即浏览器的线程之一正在等待来自连接到远程主机的套接字的输入)。

(...) and another thread just sitting there in an infinite loop waiting for a peer to try to connect (...)

这称为忙等待,它被认为是一种不好的做法。看看select(2) , epoll(4)或相关机制。

关于c - 多线程程序 : waiting on input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288693/

相关文章:

java - 了解 Java 多线程中的内存可见性

python - 如何在 Cython 中声明带有指针的链表

c++ - C++在主线程中等待 future 而无需while(true)

c++ - 更新图像显示时的QImage和openmp

c - 将字符串数组传递给函数

c++ - 同一互斥锁上的锁定和解锁顺序是否一致?

c++ - Qt Blocking Master 示例中 Mutex 的使用

c - PIC C - 这样做的目的是什么?

c++ - 从 Writing Solid Code 调试内存包装代码,或可下载的 C/C++ 的类似替代品?

c - 如何在C中初始化 bool 指针?