10

我正在 Windows 中试验多线程,想知道我是否应该

如果我尝试在不同的平台上开发这样的应用程序,学习 Pthreads 会很有用——但是我是否因为不学习 Win32 API 而失去了什么?还是两者都足够相似,以至于学习一个可以让我很容易地弄清楚另一个?

4

5 回答 5

7
  1. 使用增强线程。当 C++0x 出现时,我们将拥有 std::threads。Boost 线程具有最接近标准线程的实现。

  2. 否则使用 pthreads。Pthreads 是第二接近于 std::threads 的,并且构成了 std 线程和 boost 线程的主要基础。

  3. 否则直接做windows线程。你仍然可以学习线程如何工作,并形成事物的心理模型。它只是倾向于使用有点不标准的同步原语。

于 2010-03-08T19:52:35.873 回答
1

如果您使用的是 C/C++,请尝试使用 C/C++ 运行时的线程函数。如果您使用 Win32(或其他非 CRT 函数创建线程),CRT 可能无法在新线程中正确初始化,导致各种问题(您可以在这里阅读:http: //www.codeguru.com /forum/archive/index.php/t-371305.html)。

然而,大多数线程函数(在 CRT、Win32 或 pthread 中)都是基于创建线程、同步线程和销毁线程的功能。在实践中,这并不总是那么容易使用。

去年有一种趋势是转向基于任务的线程(嗯,我是这样称呼的,我不知道正式名称是什么)。在基于任务的线程中,您创建一个任务,然后要求“线程逻辑”执行任务,而不是启动一个线程然后在其中执行一些逻辑。

支持这种使用线程的新方式的系统有:

  • Visual Studio 2010(我们将不得不等待几天)
  • 英特尔线程构建模块

Visual Studio 2010 甚至(似乎)有特殊的调试逻辑来调试“并行任务”。

于 2010-03-08T20:05:25.207 回答
1

如果您要进行大量 Windows 编程,学习基本的 Win32 线程构造是值得的:临界区、互锁函数、CreateThreadWaitFor*Object等。这些并不难理解,并且它们可以透明地转换为其他线程中的等效对象构架。

但是,对于更高级的线程结构,例如信号量、事件等,我会使用该pthreads库,因为这些的文档往往更清晰,示例也更丰富。

于 2010-03-08T18:20:03.023 回答
0

我发现坚持使用 pthreads 可以在三个方面节省我的理智:

  • 我不必通过 WinAPI 文档进行斗争,这些文档通常没有任何质量。
  • 任何对线程做很多事情的人都可以在 pthreads 方面提供帮助。我在网上找到了更多关于 pthreads 的好信息来源。
  • 每当我使用 WinAPI 实现比“Hello World”更复杂的东西时,我发现它所花费的时间远远超出了人们合理预期的时间。不过,这只是我的经验输入。

就功能而言,我从来没有发现 pthread 缺少任何东西,所以我认为我从来没有发现需要寻找其他地方。学习一个可以在任何环境中使用的库还有很多话要说。

于 2010-03-08T18:13:24.210 回答
0

看看 std::thread

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2184.html

和介绍

http://www.devx.com/SpecialReports/Article/38883

于 2010-03-08T18:13:48.890 回答