我在Windows中尝试multithreading,并想知道我是否应该
如果我尝试在不同的平台上开发这样的应用程序,学习Pthreads将会很有用,但是如果不学习Win32 API,我会失去什么? 还是都是相似的,以便学习一个让我找出对方很容易?
使用Boost线程。 当C ++ 0x出现时,我们将有std :: threads。 Boost线程与std线程有最接近的实现。
否则使用pthreads。 Pthreads是第二接近std :: threads,并且形成了std线程和boost线程的主要基础。
否则直接穿线窗户。 你仍然可以学习线程如何工作,并形成一个事物的心理模型。 它只是倾向于使用有点不标准的同步原语。
如果你要进行大量的Windows编程,学习基本的Win32线程结构将会付出代价:关键部分,互锁函数, CreateThread
, WaitFor*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甚至具有(似乎)特殊的调试逻辑来调试“并行任务”。
我发现坚持pthreads保存我的理智三个方面:
就能力而言,我从来没有发现任何东西缺少pthreads,所以我觉得我从来没有觉得有必要去别的地方看看。 学习图书馆还有很多值得一提的地方,你可以在任何环境下使用它。