【发布时间】:2015-07-05 16:58:48
【问题描述】:
我首先是一个初学者 C/C++ 程序员,但我对此很好奇。 我的问题更具理论性。
我听说 C 没有显式的多线程 (MT) 支持,但是有一些库可以实现这一点。我找到了构建 MT 程序必须包含的“process.h”标头,但我不明白的是 MT 本身是如何工作的。
我知道 CPU 中有线程(为简单起见假设它是单核)正在运行,并且每分钟只有一个线程。 CPU 在线程之间切换的速度非常快,因此用户将其视为同时工作(如果不是,请纠正我)。
但是 - 当我写下以下内容时真正发生了什么
beginthread( Thread, 0, NULL ) //or whatever function/class method we use
请记住,C 不支持 MT。我的意思是,代码如何告诉 PC 多线程运行两个函数,而语言显式方法无法实现? 我猜在与“process.h”相关的库中存在一些“作弊”,但那是什么作弊,我不能只在网上找到。 更具体地说——我不是在问如何使用 MT,而是在问它是如何构建的?
对不起,如果之前回答过,或者问题太复杂:)
更新: 假设我们有 C 语言。它有函数、变量、指针等。我不知道任何可以与其他函数同时运行的“特殊”函数类型。除非它调用了其他一些函数。但是调用者函数停止并等待? 是不是这样,当我运行 MT 应用程序时,有一个特殊的“全局”函数会重复调用我的 f1() 和 f2(),看起来它们是同时工作的?
【问题讨论】:
-
C 确实有明确的多线程支持,只是
#include <thread.h>。 -
线程不是处理器的一部分。这是一个与操作系统调度程序有关的概念。多线程涉及与调度程序交互。
-
@KerrekSB 你在用什么编译器,支持thread.h?
-
Kerrek SB,是的,我理解你的意思是操作系统正在处理处理器线程,所以我的代码不直接与 CPU 通信,但仍然有什么诀窍,这就是我没有得到的。
-
@this:我没有使用任何编译器。我在评论 C :-)
标签: c multithreading implementation