Visual C ++中的Pthreads

我在Windows中尝试multithreading,并想知道我是否应该

  • 使用Win32 API
  • 使用Windows的POSIX线程

如果我尝试在不同的平台上开发这样的应用程序,学习Pthreads将会很有用,但是如果不学习Win32 API,我会失去什么? 还是都是相似的,以便学习一个让我找出对方很容易?

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

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

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

如果你要进行大量的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文档,这是不习惯任何质量。
  • 任何使用线程的人都可以用pthreads来帮忙。 我已经找到了无数更好的在线pthreads信息来源。
  • 每当我用WinAPI实现更复杂的“Hello World”时,我发现所花费的时间比人们可以预料的要长得多。 不过,这只是我的经验投入。

就能力而言,我从来没有发现任何东西缺少pthreads,所以我觉得我从来没有觉得有必要去别的地方看看。 学习图书馆还有很多值得一提的地方,你可以在任何环境下使用它。