首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.util.concurrent与Boost线程库

java.util.concurrent与Boost线程库
EN

Stack Overflow用户
提问于 2009-11-19 04:01:27
回答 6查看 4.6K关注 0票数 11

Boost Thread库与java.util.concurrent库相比如何?

性能是至关重要的,所以我更喜欢使用C++ (尽管现在的速度要快得多)。考虑到我必须用C++编写代码,那么有哪些库可以使线程化变得容易并且不容易出错。

我最近听说,从JDK1.5开始,Java内存模型发生了变化,修复了一些并发问题。那C++呢?我上一次使用C++进行多线程编程是在3-4年前,当时我使用了pthread。不过,我不希望再在大型项目中使用它了。据我所知,唯一的另一个替代方案是Boost Thread。然而,我不确定它是不是很好。我听说过关于java.util.concurrent的好消息,但是还没有关于Boost线程的消息。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-11-19 05:05:35

Boost线程比pthread更容易使用,在我看来,也比Java线程更容易使用。当一个boost线程对象被实例化时,它会启动一个新线程。用户提供将在该新线程中运行的函数或函数对象。

它真的很简单:

代码语言:javascript
复制
boost::thread* thr = new boost::thread(MyFunc());
thr->join();

通过将值存储在function对象中,可以轻松地将数据传递给线程。在最新版本的boost中,您可以向线程构造函数本身传递可变数量的参数,然后这些参数将被传递给您的函数对象的()操作符。

您还可以将RAII样式的锁与boost::mutex一起使用以进行同步。

请注意,对于std::thread,C++0x将使用相同的语法。

票数 11
EN

Stack Overflow用户

发布于 2009-12-26 21:18:54

java.util.concurrent和boost threads library具有重叠的功能,但java.util.concurrent还提供a)较高级别的抽象和b)较低级别的功能。

Boost线程提供:

和线程(Java: java.util.Thread)

  • Locking (Java:java.lang.Object
  • java.util.concurrent.locks)
  • Condition Variables (Java.java.lang.Object
  • Barrier (Java:Barrier)

java.util.concurrent还具有:

  • Semaphores
  • Reader-writer locks
  • Concurrent数据结构,例如作为高度灵活的消费者生产者system.
  • Atomic操作的BlockingQueueconcurrent lock-free hash map.
  • the Executor服务。

附注: C++目前没有内存模型。在不同的机器上,相同的C++应用程序可能必须处理不同的内存模型。这使得用C++进行可移植的并发编程变得更加棘手。

票数 12
EN

Stack Overflow用户

发布于 2009-11-19 06:06:52

在性能方面,我并不真正担心。我的直觉是,boost/c++专家可以写出比java专家更快的代码。但任何优势都必须争取。

与Java相比,我更喜欢Boost的设计范式。Java完全是面向对象的,如果你喜欢Boost/C++,它允许面向对象,但对手头的问题使用最有用的范式。尤其是在处理锁的时候,我喜欢RAII。Java很好地处理了内存管理,但有时它感觉程序员的其他资源被篡改了:文件句柄、互斥、数据库、套接字等。

Java的并行库比Boost的更广泛,线程池,并发容器,原子等等。但是核心原语,线程,互斥锁,条件变量都是一样的。

因此,对于性能,我会说这是一次洗牌。如果你需要大量的高级并发库支持,Java就是最好的选择。如果你更喜欢范式自由,C++。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1758664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档