多线程程序:等待输入

Toa*_*ums 2 c multithreading

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

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

但后来我们一直在阅读,看起来如果一个线程在等待输入,其他线程就像往常一样继续运行......

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

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

Jan*_*Jan 5

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

考虑你的浏览器.当您在Internet上冲浪时,当您等待页面加载时(即浏览器的一个线程正在等待连接到远程主机的套接字的输入),用户界面不会冻结.

(...)和另一个线程坐在无限循环中等待对等端尝试连接(...)

这叫做忙碌等待,这被认为是一种不好的做法.请看一下select(2),epoll(4)或相关机制.