Linux 多线程将涉及 pthreads 库(在大多数情况下)。 MSVC 使用的等效库是啥?
Posted
技术标签:
【中文标题】Linux 多线程将涉及 pthreads 库(在大多数情况下)。 MSVC 使用的等效库是啥?【英文标题】:Linux multithreading would involve the pthreads library(in most cases) . What is the equivalent library used by MSVC?Linux 多线程将涉及 pthreads 库(在大多数情况下)。 MSVC 使用的等效库是什么? 【发布时间】:2009-12-12 02:23:19 【问题描述】:我需要知道哪些是 MSVC 用于多线程的 API/库。如果有多个,请告诉我哪个是最广泛使用的。
如果我的问题听起来太天真,那是因为我以前从未做过线程,而且根据我过去的经验,我知道这里有人可以让我开始/指出正确的方向,从这一点我可以开始。
【问题讨论】:
【参考方案1】:Windows 上的线程不需要任何额外的库,它直接内置在 Win32 API 中。例如,要创建一个线程,调用CreateThread
。线程函数的完整列表可以在 MSDN Process and Thread Functions 找到。
请注意,如果您正在编写一个使用 MSVCRT 的程序,您可能希望改为调用 _beginthread()
系列函数。这样做将有助于设置和拆除用于支持 MSVCRT 库的线程的其他数据结构。
【讨论】:
还有一件事——windows线程环境是抢占式的,对吧? 那么,你能看看***.com/questions/1892104/…吗?这种情况是否会在 Windows 上发生(如果不是默认情况下会发生)? 在 Win7 x64 中有一个称为用户模式调度线程的新功能,它允许编写 UMS 调度程序的人在 UMS 线程上进行阻塞内核调用时接收通知,然后调度另一个 UMS 线程,这发生在没有完整的上下文交换的情况下。 ConcRT 在 Win7 x64 上实现了一个 UMS 调度程序,“事件”操作方法主题显示了这一点。【参考方案2】:正如其他人建议的那样,您可以使用 CreateThread 或 _beginthread 或线程池 API,the process and threads reference is best 用于 Win32 线程,您还可以使用与 C++0x std::thread 标准非常接近的 boost::thread。
如果您使用 Visual Studio,另一个选择是查看并行模式库和异步代理库,它们是 Microsoft 的 Concurrency Runtime (ConcRT) 的一部分,是 Visual Studio 2010 中的新增功能。有几种方法- 链接中可以帮助您从这里开始的帮助主题。
ConcRT 中的 API 是“任务”API,而不是线程 API,让您可以在比线程稍高的抽象级别上工作。即并行循环、并行管道和任务组。与 boost::thread 一样,API 主要设置为与函子一起使用,而不是 CreateThread / ThreadPool 样式的 API,尽管有些 API 在语法上与 CreateThread 相似(例如 Concurrency::Scheduler::ScheduleTask)。
-瑞克
【讨论】:
【参考方案3】:正如@Greg 所说,您可以使用 CreateThread 在 windows 上创建线程。其他选择是使用增强线程,恕我直言,它提供了更好的接口来处理它们。
【讨论】:
并且也可以在 Linux 和其他平台上工作。并且几乎与添加到 C++0x 的线程模型相同。绝对不是一个坏主意:)以上是关于Linux 多线程将涉及 pthreads 库(在大多数情况下)。 MSVC 使用的等效库是啥?的主要内容,如果未能解决你的问题,请参考以下文章