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 使用的等效库是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Linux多线程

linux下线程以及pthread库

Linux----多线程(上)

Linux 多线程同步机制:互斥量信号量条件变量

Linux--线程

Linux C++ pthread是什么缩写?(POSIX Threads)<pthread.h>