我如何开始使用多线程编程?

时间:2009-11-10 10:09:05

标签: c++ c multithreading unix pthreads

我是Stack Overflow的初学者。 我正在使用C / C ++开发Unix平台。 在这些方面了解基本编程我怎样才能从multithreading开始?

多线程似乎非常有趣,我想在这方面发展我的知识。

我怎样才能开始使用多线程技术?有哪些最好的技巧/书籍/电子书/文章可以尽早获取概念?

11 个答案:

答案 0 :(得分:8)

关于pthread,互斥体的研究并试图实现对你有益的。

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

答案 1 :(得分:8)

学习多线程编程有两个部分:

  1. 如何编写多线程应用程序
  2. 如何使用可用的API(pthread)
  3. 学习多线程编程更难,这是Linux Journal中发表的一篇好文章,可以帮助您理解基本原理。

    为了更好地理解pThreads,我建议您阅读本教程 - POSIX Threads Programming

    O'rielly还有一本好书叫PThreads Programming

答案 2 :(得分:2)

如果您开始使用多线程,我的建议是首先检查并更好地了解系统上的I / O.了解阻塞与非阻塞I / O,信令,异步例程,回调等等。 I / O可能是将多线程添加到程序的主要原因之一。有了这些知识,您就可以在pthreads或java线程上找到一本书,或者围绕Boost线程库或其他线程库包装您最喜欢的技术。

答案 3 :(得分:1)

我认为维基百科文章Multithreading为您提供了快速概述,并通过关注外部链接,您将对该主题有一个很好的概述。 在那之后 - 或者另外 - 你可以阅读Tanenbaum的Operating Systems: Design and Implementation(顺便说一句好书)。 但最重要的是 - 在我看来 - 要抓住它。所以只需从...下载一个示例应用程序,让我们说The Code Project或者你会发现的任何网站,并使用它。如果您使用锁定,或者如果两个线程尝试访问相同的资源以及发生这种情况的频率等等,会看到应用程序的不同之处。 据我所知,你会很快掌握它。评估和玩弄对自己不熟悉的技术很有趣。

答案 4 :(得分:1)

我发现这个tutorial信息量很大且写得很清楚。希望它有所帮助。

答案 5 :(得分:0)

也许有点争议,但当我试图解决一次编码拼图时,多线程真的很适合我。

这个难题是关于编写线程安全代码而不使用互斥锁。我的第一次尝试很悲惨,但是当我终于得到它时,就像学骑自行车一样 - 从那以后我从未对并发感到不确定。

有些时候,我甚至偶然发现了那些阅读过有关该主题的书籍的程序员,但却无法理解简单的事情,例如原始分配有时可能不是原子操作。

答案 6 :(得分:0)

如果您想学习详细信息,请尝试阅读Advanced Programming in the UNIX Environment。 或以Computer Systems: A Programmer's Perspective开头。

答案 7 :(得分:0)

一切都取决于你的目标。基于POSIX线程框架解决了大量具有常见多线程问题的代码和文章(我在这里看到了好文章的推荐数量)。主要问题是你想要建立什么。对于某些任务,建议不要进行多线程。

这是书“Foundations of Multithreaded, Parallel, and Distributed Programming”,它与讨论的主题相关,我想推荐。它最显着的优点是“相对容易阅读”的风格,但没有与POSIX线程意识形态的硬连接(这是常见的问题)。

答案 8 :(得分:0)

要尝试的其他内容:http://www.threadingbuildingblocks.org

答案 9 :(得分:0)

因为它是UNIX,为什么不从进程和IPC通信开始?即消息队列,共享内存和互斥锁。

答案 10 :(得分:0)

研究各种库框架和O / S工具是理解低级并发的好方法。您在那里找到的示例可以让您在很短的时间内开始编写并发代码。

在通过一些死锁和共享内存损坏问题调试之后,您会发现需要一些工具来推理和分解并发问题。我个人喜欢Herb Sutter的The Pillars of Concurrency文章作为起点。这个想法是为了更好地理解为什么需要并发。您是否在寻找改进的响应时间,并行计算,某些原因组合?

理解“为什么”会引导你找到更好的“什么”。从那里,您可以随时采用不同的低级方法:Active Objectsmonitor objectsmessage passingetc。正如你所说,在这个领域有很多东西要知道。