繁体   English   中英

Visual C ++中的Pthreads

[英]Pthreads in Visual C++

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

如果我尝试在不同的平台上开发这样的应用程序,学习Pthreads会很有用 - 但是我没有学习Win32 API而失去了什么? 或者两者都足够相似,以便学习一个可以让我轻松找出另一个?

  1. 使用Boost线程。 当C ++ 0x出现时,我们将有std :: threads。 Boost线程与std线程的实现最接近。

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

  3. 否则直接进行Windows线程化。 您仍然可以了解线程的工作方式,并形成事物的心理模型。 它只是倾向于使用有点非标准的同步原语。

如果您要进行大量的Windows编程,学习基本的Win32线程结构将付出代价:关键部分,互锁函数, CreateThreadWaitFor*Object等。这些并不难理解,并且它们透明地转换为等效的其他线程框架中的对象。

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

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

我发现坚持使用pthreads可以将我的理智保存在三个方面:

  • 我没有必要通过WinAPI文档进行战斗,这些文档通常不具备任何质量。
  • 任何对线程做很多事情的人都可以帮助解决pthread问题。 我发现了关于pthreads在线的无限更多信息来源。
  • 每当我使用WinAPI实现更复杂的“Hello World”时,我发现它需要的时间远远超过人们可以合理预期的时间。 不过,这只是我的经验输入。

就能力而言,我从未发现pthreads缺乏任何东西,所以我认为我从未发现需要寻找其他地方。 学习一个你可以在任何你所处理的环境中使用的图书馆也有很多东西可以说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM