【问题标题】:Pthreads in Visual C++Visual C++ 中的 Pthreads
【发布时间】:2011-01-25 02:27:21
【问题描述】:

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

如果我尝试在不同平台上开发此类应用程序,学习 Pthreads 会很有用 - 但是我是否因为不学习 Win32 API 而失去了什么?还是两者都足够相似,以至于学习一个可以让我轻松找出另一个?

【问题讨论】:

  • 如果可能的话,你可以使用 Boost.Thread。它适用于所有平台(它支持所有主要平台)。
  • 如果您正在试验,那么 POSIX Threads for Windows 库可能对您提到的原因非常有帮助。如果您想发布产品,那么您必须考虑 LGPL 许可证是否与您想要发布产品的方式兼容。

标签: c++ windows multithreading pthreads visual-c++-2005


【解决方案1】:

我发现坚持使用 pthread 可以在三个方面让我保持理智:

  • 我不必奋力拼搏 WinAPI 文档,不习惯 任何品质。
  • 任何对线程做很多事情的人 可以帮忙 线程。我在网上找到了更多关于 pthread 的好信息来源。
  • 每当我实施更多 复杂的“Hello World” WinAPI,我发现它需要很远 比一个人可以合理地长 预计。这只是我的经验 不过,输入。

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

【讨论】:

  • 我不能完全说我是 unix 拥护者,但我也不喜欢过度设计的界面。 Win32 线程是我上周遇到的一个障碍。另一个是 CreateProcess。这些是简单任务的接口,这些任务已经过度架构,以至于它们没有简单的工作默认值。 CreateProcess 的文档指出安全模型是过度配置的原因。我使用过同样的东西的 solaris 模型,他们使用 - 惊喜、惊喜、fork/exec 以及一组可选的工具来管理安全策略。 FUD。对。
  • 新的和压倒性的不等于坏。
【解决方案2】:
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:
    1. 使用增强线程。当 C++0x 出现时,我们将拥有 std::threads。 Boost 线程的实现最接近 std 线程。

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

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

    【讨论】:

      【解决方案5】:

      如果您使用的是 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 甚至(似乎)有特殊的调试逻辑来调试“并行任务”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多