java.util.concurrent与Boost Threads库

use*_*855 11 c++ java multithreading boost-thread java.util.concurrent

Boost Thread库如何与java.util.concurrent库进行比较?

性能至关重要,所以我更愿意继续使用C++(尽管Java现在要快得多).鉴于我必须使用C++编写代码,存在哪些库可以使线程更容易且更不容易出错.

我最近听说,从JDK 1.5开始,更改了Java内存模型以修复一些并发问题.C++怎么样?我最后一次用C++进行多线程编程是在3 - 4年前我使用pthreads的时候.虽然,我不想再用于大型项目了.我所知道的唯一另一种选择是Boost Threads.但是,我不确定它是否好.我听说过关于java.util.concurrent的好东西,但还没有关于Boost线程的内容.

dme*_*ter 12

java.util.concurrent和boost线程库具有重叠功能,但java.util.concurrent也提供a)更高级别的抽象和b)更低级别的功能.

提升线程提供:

java.util.concurrent还有:

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


Cha*_*via 11

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

它真的很简单:

boost::thread* thr = new boost::thread(MyFunc());
thr->join();
Run Code Online (Sandbox Code Playgroud)

通过在函数对象中存储值,可以轻松地将数据传递给线程.在最新版本的boost中,您可以将可变数量的参数传递给线程构造函数本身,然后将其传递给您的函数对象的()运算符.

您还可以使用RAII样式的锁boost::mutex进行同步.

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


def*_*ode 7

表现明智,我不会真的担心.我的直觉是,boost/c ++专家可以编写比java专家更快的代码.但任何优势都必须为之奋斗.

我更喜欢Boost的Java设计范例.Java一直是OO,如果你愿意,Boost/C++允许使用OO,但是对于手头的问题使用最有用的范例.特别是在处理锁时我喜欢RAII.Java的处理内存管理精美,但有时感觉就像程序员其余资源得到杆身:文件句柄,互斥,DB,插座等

Java的并发库比Boost更广泛.线程池,并发容器,原子等.但核心原语彼此相同,线程,互斥,条件变量.

所以对于表现我会说这是一个洗.如果您需要大量高级并发库支持Java获胜.如果你更喜欢范式自由C++.