Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
POSIX线程的经验?(或推荐更好的) 我正在寻找C++的轻量级多线程框架。我找到了POSIX线程。 请分享您使用POSIX线程的实践经验:在开始之前,我想从真人而不是维基上了解它的优缺点。 如果你将它与任何东西(也许更好)进行比较,了解其中任何一个都会很有趣_C++_Multithreading_Cross Platform_Pthreads - Fatal编程技术网

POSIX线程的经验?(或推荐更好的) 我正在寻找C++的轻量级多线程框架。我找到了POSIX线程。 请分享您使用POSIX线程的实践经验:在开始之前,我想从真人而不是维基上了解它的优缺点。 如果你将它与任何东西(也许更好)进行比较,了解其中任何一个都会很有趣

POSIX线程的经验?(或推荐更好的) 我正在寻找C++的轻量级多线程框架。我找到了POSIX线程。 请分享您使用POSIX线程的实践经验:在开始之前,我想从真人而不是维基上了解它的优缺点。 如果你将它与任何东西(也许更好)进行比较,了解其中任何一个都会很有趣,c++,multithreading,cross-platform,pthreads,C++,Multithreading,Cross Platform,Pthreads,UPD:跨平台功能对我来说非常重要,因此我非常感谢您对这一方向的介绍 UPD2:我已经有过使用QNX/Win32框架的经验,但它不是轻量级的,而且-哦,我忘了提到-它是商用的,不是免费的,但我需要一个免费的。我发现它非常好,特别是在重写了1.35之后。Windows上的POSIX线程并不是那么简单,它是一个C API,所以我肯定更喜欢Boost而不是它。它有你需要的所有东西,是便携的,需要很少的设置。 ,POSIX线程读取API是一个C API,而不是C++。p> 你想用它做什么?就我个人而言,

UPD:跨平台功能对我来说非常重要,因此我非常感谢您对这一方向的介绍


UPD2:我已经有过使用QNX/Win32框架的经验,但它不是轻量级的,而且-哦,我忘了提到-它是商用的,不是免费的,但我需要一个免费的。

我发现它非常好,特别是在重写了1.35之后。Windows上的POSIX线程并不是那么简单,它是一个C API,所以我肯定更喜欢Boost而不是它。它有你需要的所有东西,是便携的,需要很少的设置。

,POSIX线程读取API是一个C API,而不是C++。p> 你想用它做什么?就我个人而言,我发现它是一个非常笨拙且过于冗长的API。但是,如果您想在类似Unix/Linux的操作系统上进行跨平台开发,这是最好的选择。Windows本机不支持它

就我个人而言,我不会在代码中直接使用线程或任何其他依赖操作系统的API。在上面构建另一个抽象层。例如,我们构建了一个我们称之为“操作系统层”;一个C++框架,用于处理线程、信号量、定时器、互斥等。在幕后,我们实现了POSIX、Win32、INTEGRITY和vxWorks。这使我们的代码可以在多种平台上工作


如果您不想构建自己的层,可以考虑重用许多其他层,如Boost、Qt等。

我不久前在编写程序时使用了POSIX。它在Linux和Solaris上运行良好,实现起来也不太复杂。另一方面,我哥哥是一名Windows程序员,他更喜欢boost而不是Posix。我想这取决于你的目标。我发现boost有点臃肿,听说过关于它的不好的事情。我哥哥认为这是自切片面包以来最棒的东西。我想这是福特对雪佛兰的比赛。每个人都会有自己的看法

如果您不喜欢的线程API,那么您可能想看看的线程API。

我发现它与win32线程API非常相似,您需要注意的唯一(真正)区别是win32互斥锁在同一线程上使用时不会阻塞,而posix会阻塞。除此之外,它是一个非常直接的API。

正如您提到的QNX一样,请看一看。它是一个可用于(包括QNX)的大型框架。 其他人已经提到


建议您使用这些库中的一个,而不要使用低级别、不可移植且容易出错的C API。

另一个C线程API是GLib的GThreads。某些gthread和pthread调用(如pthread_create)之间存在1对1的映射,但gthread有两大功能,我发现它们非常有用:

  • 线程池和
  • 用于在线程之间发送消息的异步队列

线程池非常强大,允许动态调整池的大小。如果你在C++中工作,那么看

Boost线程库可能是你最好的选择。我在Unix和win32上都有非常积极的经验。避免ACE——糟糕的设计、错误的方法。另请看一看,尽管我还没有在实践中使用过它。

谢谢,我编辑了我的回复,说“Windows上不支持本机支持”。如果你想在Windows上使用pthreads,你也可以选择cygwin路线。除非你真的想从事图书馆业务,或者你需要的东西太简单以至于微不足道,否则不要自己写。在不同的操作系统(例如Windows和Linux)上线程的工作方式非常不同,如果你在前期的抽象中没有做到这一点,你最终会遇到问题。你说的“笨拙”是什么意思?它是太低级了还是别的什么?@michaelkohne:编写简单易用的包装器来隐藏不同的实现并没有什么大不了的。在日常工作所需的95%的功能中,线程的工作非常有效。@ Michael Kohne:在不同的OS设备上编写自己的C++包装包确实相当容易。另外,我们不能在我们的环境(或其他第三方实用程序)中使用boost。您能否澄清一点,为什么boost更好?我不是很注重胜利。我更喜欢调试支持/简单性等等。正如Anteru所说:Pothon是一个C API,而Boost是C++库。Boost不是面向Windows的,而是跨平台的。不同于p螺纹,它利用C++特性,并根据C++习惯用法设计。通过pthread,它为您提供的一些功能包括:类型安全性、向新线程传递参数的更大灵活性以及更简单的用法。Boost广泛使用RAII,例如,要创建锁,只需创建一个本地对象,当它超出范围时,锁就会被释放。比pthread更简单,在pthread中,您必须显式地调用函数来释放锁。(如果你忘记了,或者抛出了异常,你就完蛋了)另外,如果你使用boost::thread,当完全采用C++0x时,将更容易移植到std::thread,因为std::thread与boost::thread非常相似。posix上的互斥对象可以通过将它们标记为递归(pthread_mutextatr_settype)来避免(&attr,PTHREAD\u MUTEX\u RECURSIVE))