我正在 Windows 中试验多线程,想知道我是否应该
如果我尝试在不同的平台上开发这样的应用程序,学习 Pthreads 会很有用——但是我是否因为不学习 Win32 API 而失去了什么?还是两者都足够相似,以至于学习一个可以让我很容易地弄清楚另一个?
我正在 Windows 中试验多线程,想知道我是否应该
如果我尝试在不同的平台上开发这样的应用程序,学习 Pthreads 会很有用——但是我是否因为不学习 Win32 API 而失去了什么?还是两者都足够相似,以至于学习一个可以让我很容易地弄清楚另一个?
使用增强线程。当 C++0x 出现时,我们将拥有 std::threads。Boost 线程具有最接近标准线程的实现。
否则使用 pthreads。Pthreads 是第二接近于 std::threads 的,并且构成了 std 线程和 boost 线程的主要基础。
否则直接做windows线程。你仍然可以学习线程如何工作,并形成事物的心理模型。它只是倾向于使用有点不标准的同步原语。
如果您使用的是 C/C++,请尝试使用 C/C++ 运行时的线程函数。如果您使用 Win32(或其他非 CRT 函数创建线程),CRT 可能无法在新线程中正确初始化,导致各种问题(您可以在这里阅读:http: //www.codeguru.com /forum/archive/index.php/t-371305.html)。
然而,大多数线程函数(在 CRT、Win32 或 pthread 中)都是基于创建线程、同步线程和销毁线程的功能。在实践中,这并不总是那么容易使用。
去年有一种趋势是转向基于任务的线程(嗯,我是这样称呼的,我不知道正式名称是什么)。在基于任务的线程中,您创建一个任务,然后要求“线程逻辑”执行任务,而不是启动一个线程然后在其中执行一些逻辑。
支持这种使用线程的新方式的系统有:
Visual Studio 2010 甚至(似乎)有特殊的调试逻辑来调试“并行任务”。
如果您要进行大量 Windows 编程,学习基本的 Win32 线程构造是值得的:临界区、互锁函数、CreateThread
、WaitFor*Object
等。这些并不难理解,并且它们可以透明地转换为其他线程中的等效对象构架。
但是,对于更高级的线程结构,例如信号量、事件等,我会使用该pthreads
库,因为这些的文档往往更清晰,示例也更丰富。
我发现坚持使用 pthreads 可以在三个方面节省我的理智:
就功能而言,我从来没有发现 pthread 缺少任何东西,所以我认为我从来没有发现需要寻找其他地方。学习一个可以在任何环境中使用的库还有很多话要说。