C语言中的并行线程

C语言中的并行线程,c,parallel-processing,C,Parallel Processing,我的应用程序中有两个线程。是否可以在不睡眠任何线程的情况下同时执行两个线程 是,如果您有多个处理器或多核处理器。一个线程将在一个内核中运行。C本身没有任何方法来编写多线程代码 但是,POSIX有一些库,允许您使用C中的线程 关于此主题的一篇好文章是。您可以在应用程序中并行运行线程,特别是当它们没有等待其他输入或条件时。例如:一个线程可能正在解析文件,另一个线程可能正在应用程序中播放歌曲 通常操作系统负责线程时间切片。因此,在应用程序级别,看起来这些线程是并行运行的,但操作系统会进行时间切片,给每

我的应用程序中有两个线程。是否可以在不睡眠任何线程的情况下同时执行两个线程

是,如果您有多个处理器或多核处理器。一个线程将在一个内核中运行。

C本身没有任何方法来编写多线程代码

但是,POSIX有一些库,允许您使用C中的线程


关于此主题的一篇好文章是。

您可以在应用程序中并行运行线程,特别是当它们没有等待其他输入或条件时。例如:一个线程可能正在解析文件,另一个线程可能正在应用程序中播放歌曲

通常操作系统负责线程时间切片。因此,在应用程序级别,看起来这些线程是并行运行的,但操作系统会进行时间切片,给每个线程一定的执行时间


使用多核处理器/内核可以实时并行运行线程,但是操作系统会决定运行哪些线程,除非您在较低级别专门编写代码以确保哪些线程要并行运行。

正如其他人所提到的,使用多核是可能的,但是,这取决于操作系统决定如何分配线程。正如我所见,你无法控制每条线程的运行位置

对于一个非常好的教程,有一些很好的解释和图片,您可以查看本页,以及如何使用POSIX库执行多线程的代码

睡眠的时间片很难看到,所以最好的办法是测试它,例如,让你的两个线程开始每毫秒计数一次,看看这两个线程是否相同。如果没有,那么至少有一个将由cpu休眠

很可能两个线程都会在某个时间进入睡眠状态,测试的目的是查看两个线程之间的差异有多大


一旦一个线程阻塞,无论是等待发送数据还是等待接收,它都将进入睡眠状态,以便其他线程可以运行,这样操作系统就可以继续确保一切正常运行。

请将您的问题具体一点,或者至少包含一些您正在尝试执行的代码片段。是,如果你有两个物理CPUSounds,比如一个测试题?家庭作业?具体要求是什么?什么应用程序?请至少列出您运行的平台。一段代码也很好,可以显示您正在使用的其他API—有些API不是线程安全的。并提供关于手头任务的更多细节。您的问题没有足够的信息来回答。线程不能保证在另一个处理器或内核上运行,即使您有多个处理器或内核。这可能是真的,但可以保证在单核计算机上,只有一个线程会运行,而忽略超线程—这至少使它成为一个伪多核计算机。对于多核机器,线程有可能真的同时运行,但不能保证。大多数情况下,操作系统还提供多线程库。在windows上的C中,可以使用_beginthreadex在应用程序中创建线程,甚至可以创建线程。但是_beginthreadex是首选。在某些平台上,您可以使用关联API控制每个线程的运行位置,例如Windows上的SetThreadAffinityMask和Linux上的sched_setaffinity。@bk1e-谢谢,我从未听说过这一点,但对于我希望在调度时覆盖操作系统的实例来说,它看起来不错。@bkl1e-来自MSDN:为进程或线程设置关联掩码可能会导致线程接收的处理器时间减少,因为系统被限制在某些处理器上运行线程。在大多数情况下,最好让系统选择一个可用的处理器。@Kavitesh Singh-如果您运行的应用程序基本上占用了计算机,那么这可能是有意义的,但在大多数情况下,我认为这样做会有风险,但这是一个有用的选项。