我的应用程序中有两个线程。是否可以同时执行两个线程而不会休眠任何线程?
答案 0 :(得分:9)
您可以在应用程序中并行运行线程,特别是如果它们没有等待某些输入或条件。例如:一个线程可能正在解析文件而另一个可能正在您的应用程序中播放一首歌。
通常,OS负责线程时间切片。因此,在应用程序级别,看起来这些线程正在并行运行,但操作系统会按时间切片为每个线程提供一定的执行时间。
对于多核处理器/内核,可以实时并行运行线程,但操作系统决定运行哪些线程,除非您在较低级别专门编码以确保您希望并行运行哪些线程。
答案 1 :(得分:4)
正如其他人所提到的,有多个核心是可能的,但是,这取决于操作系统决定如何分配线程。在我指示每个线程运行的位置时,你没有任何控制权。
对于一个非常好的教程,有一些很好的解释和图片,你可以看看这个页面,以及如何使用POSIX库进行多线程的代码。
http://www.pathcom.com/~vadco/parallel.html
很难看到睡眠的时间片,所以最好的办法是测试它,例如,让你的两个线程开始计算每毫秒,看看两者是否相同。如果不是,那么至少有一个人会被cpu睡觉。
很可能两者都会在某个时间进入睡眠状态,测试是看两个线程之间存在多大差异。
一旦一个线程阻塞,要么等待发送数据,要么等待接收,它将被置于休眠状态以便其他线程可以运行,以便操作系统可以继续确保一切正常工作。
答案 2 :(得分:3)
C本身没有办法做多线程代码。
但是,POSIX具有允许您使用C语言中的线程的库。
关于此主题的一篇好文章是How to write multi-threaded software in C and C++。
答案 3 :(得分:0)
是的,如果您有多个处理器或多核处理器。一个线程将在一个核心中运行。