【发布时间】:2011-01-07 05:16:52
【问题描述】:
Windows 中的 CreateThread 和 beginthread API 有什么区别?哪个更适合创建线程?
【问题讨论】:
标签: c windows multithreading
Windows 中的 CreateThread 和 beginthread API 有什么区别?哪个更适合创建线程?
【问题讨论】:
标签: c windows multithreading
早期版本的 Microsoft CRT 需要 _beginthread() 和 _beginthreadex() 来初始化线程本地状态。 strtok() 函数就是一个例子。已经修复了,该状态现在被动态初始化,至少从 VS2005 开始。使用CreateThread() 不再导致问题。
【讨论】:
CreateThread() 创建线程,那么strtok() 将分配每个线程数据块。但是,当线程退出时,该块将被泄漏。可能没什么大不了的,但为什么不首先使用_beginthreadex()?此外,对于新的“打包应用程序”,_beginthreadex()(来自 VS 2012)将确保在新线程中初始化 MTA。为什么不让程序员养成使用_beginthreadex() 的习惯(与使用CreateThread() 相比,它确实没有任何缺点——它甚至具有基本相同的签名)。