C/C+的线程问题+&引用;“系统级程序员”;与Java程序员面临的情况有很大不同?

C/C+的线程问题+&引用;“系统级程序员”;与Java程序员面临的情况有很大不同?,java,c++,c,multithreading,jobs,Java,C++,C,Multithreading,Jobs,我正在寻找一份开发工作,许多清单都规定开发人员必须精通多线程。对于java作业列表,C++中包含“系统编程”的UNIX。p> 在过去几年中,我一直在使用Java并使用它的各种同步机制 在90年代后期,我做了大量的C++工作,虽然线程很少。然而,在大学里,我们在Solaris上使用线程 我的问题是,与Java开发人员相比,C/C++开发人员所面临的问题是否存在显著差异,以及解决这些问题的技术是否存在根本性差异。Java显然包括一些更好的机制和集合的同步版本等 如果我想在UNIX上刷新或重新学习线程

我正在寻找一份开发工作,许多清单都规定开发人员必须精通多线程。对于java作业列表,C++中包含“系统编程”的UNIX。p> 在过去几年中,我一直在使用Java并使用它的各种同步机制

在90年代后期,我做了大量的C++工作,虽然线程很少。然而,在大学里,我们在Solaris上使用线程

我的问题是,与Java开发人员相比,C/C++开发人员所面临的问题是否存在显著差异,以及解决这些问题的技术是否存在根本性差异。Java显然包括一些更好的机制和集合的同步版本等


如果我想在UNIX上刷新或重新学习线程,最好的方法是什么?我应该去哪个图书馆?在C++中有一些关于线程的很好的教程吗?

垃圾回收使编程线程不泄漏内存更容易,并且你可以处理收集的时间。 确定性析构函数使不产生僵尸的编程线程变得更容易,请参见ACM论文查看和(pthreads one是一个随机的lijnk,但它看起来可以作为起点)


在高层,Java/C/C++/的问题是相同的。关于如何解决问题的细节(要调用的函数、要创建的类等)因语言而异

线程的基本挑战(例如同步、竞争条件、线程间通信、资源清理),但Java通过垃圾收集、异常、高级同步对象、反射高级调试支持使线程更易于管理


< C++ >,你更容易出现内存损坏和“不可能”的竞争情况。您需要编写更多的低级线程原语,或者依赖于标准化语言以外的库(如boost)。

无论使用何种编程语言,线程的特性都是常见的。例如,即使在整个操作系统中,POSIX线程和WIN32线程也具有相同的逻辑特性,尽管底层硬件/内核的API调用和本机实现WRT可能会发生变化,但对于系统程序员来说,关于线程的逻辑思考以及如何使它们按预期工作是最困难的部分。对于编程语言来说,这甚至是正确的。如果您真的理解线程和线程同步的概念,那么您可以在您喜欢的任何编程语言中使用它们。因为这些编程语言在本机线程/线程同步实现的基础上提供了语法糖。

这取决于您选择的工作级别。Intel TBB和OpenMP从相当高的级别处理许多常见情况。Posix线程、WindowsAPI和可移植库(如BoostThreads)使您更接近Java中原语的水平

C++0x线程(特别是在获取和释放内存障碍的情况下)允许您使用甚至更低的级别来获得比Java提供的更多的控制和复杂性(在Java中标记变量
volatile
会给它一个获取和释放内存障碍,但在Java中,不能只要求获取或释放障碍;在C++0x中可以)


请注意,C++0x的线程模型是故意低级别的,希望人们能够在其上构建TBB之类的东西,下次标准委员会开会时,他们将能够找出哪些更高级的库和工具包工作得足够好,可以学习。

C++实际上更容易编写复杂的线程aded的代码比Java的要多,因为它具有Java所缺乏的特性——或者“资源获取是初始化”这个习语用于C++ C++代码中的所有资源控制,但在多线程代码中尤其适用于自动同步管理。

这个答案需要澄清。好,我把形容词确定性确定添加到析构函数中,并链接到一个ACM论文。Dou穿线程同步非常接近Boost库实现。如果你想C++ C++线程,请考虑Boost作为一个很好的起点。术语“Boost”和“C++标准库”。我的理解是,在C++标准会议中,Boost是为了鼓励C++开发库而建立的。我打算就此发表文章。RAII是一个控制同步原语的好工具。C++ + RAII语法略微是不太干净的,但比java同步的不太明显。不要认为这会影响到这两种语言是否更容易。但是,说GC确实使某些事情变得简单。C++ +RAII语法意味着你不用每次都要得到最终的子句。