【问题标题】:Multithread Programming in C questionsC 中的多线程编程问题
【发布时间】:2012-11-22 17:38:52
【问题描述】:

我正在做一个项目,我必须用 C 语言编写一个多线程库。我必须编写诸如 thread_t_init、thread_t_shutdown、thread_t_create、thread_t_terminate、thread_t_yield 之类的函数。我正在寻找一个好的起点或至少一些建议。无论是某个网站,甚至只是一次对话,任何事情都会有所帮助。

【问题讨论】:

  • 您是否正在编写一个使用线程来完成某些任务的库?还是提供线程功能供其他程序使用的库?如果是前者,则不需要编写创建和终止线程的函数; pthreads 等其他一些库提供了这些。如果是后者,你就是在重新发明轮子。
  • 我需要后者。我正在为大学课程做最后的项目。
  • 这是跨平台的还是单一平台的?你可以使用什么?
  • 它是针对solaris系统的,它应该是一个用户级线程库。我可以使用除 pthreads 之外的任何东西。
  • Solaris 2.5 线程库 - cs.brown.edu/research/thmon/thmon2.html

标签: c multithreading unix


【解决方案1】:

在 Unix 系统下,主要的线程 API 是 POSIX Threads,也称为 Pthreads。它是每个 Unix 供应商必须实现的一组标准 API 调用。几乎所有 Unix 衍生品和类 Unix 操作系统,包括 Linux、Solaris、*BSD 和其他(因为您没有具体指定哪一个)都提供了这个 API 的实现。使用 Pthread 编写的线程程序在不同的 Unices 之间具有相当的可移植性。

劳伦斯利弗莫尔国家实验室提供了一套关于不同并行编程技术的优秀教程,包括Pthreads

【讨论】:

  • 如果从技术上讲 pthreads 是我正在尝试编程的,我看不出这对我有什么帮助。我喜欢不知道该怎么做,或者我想从哪里开始。
  • 从你的问题中看不出来。
【解决方案2】:

POSIX 线程是您正在寻找的内容

【讨论】:

  • 如果从技术上讲 pthreads 是我正在尝试编程的,我看不出这对我有什么帮助。我喜欢不知道该怎么做,或者我想从哪里开始。
  • 我假设您可以使用 POSIX 线程来实现您的方法。如果这不是一个选项,您可以调查它们是如何由 POSIX 线程实现的,并尝试克隆它们的功能。至于调查的资源,我不知道。
【解决方案3】:

查看 linux clone() 系统调用:

http://en.wikipedia.org/wiki/Clone_(Linux_system_call)

这也可能有帮助:

Source code of PThread Library?

【讨论】:

    【解决方案4】:

    据我所知,C 标准中不包含线程模型,C++ 仅在 C++11 版本中包含线程模型作为标准。因此,使用线程编程与使用外部库相同,例如使用 C++ pre-C++11,您需要掌握您决定选择的库,在 Unix 下,Pthreads(POSIX 线程)库是事实标准。

    寻找有关Pthreads 的资源。

    【讨论】:

    • C 2011 包含新的标头 <stdatomic.h><threads.h>,它们在很大程度上与 C++ 2011 中的线程保持一致。所以您的信息有点过时了——但您不太可能独自一人您对 C 2011 中的新材料一无所知。
    • @JonathanLeffler 再次阅读了我的回复,我说的是 C++ 11 之前的 C++,我的场景中不包括 C++11。
    • 您的答案开始于“AFAIK,C 没有包含在标准中的线程模型”。我向您和任何阅读您答案的人指出,C2011 标准确实包含线程模型。
    • @JonathanLeffler “C++ 仅在 C++11 版本中作为标准包含线程模型”,就在您刚刚阅读的内容之后。顺便说一句,我很感谢您为提供有关标题的详细信息所做的努力,但我认为这些信息可以很容易地从我的回复中提取出来。
    • 有一个 C 2011 标准和一个 C++ 2011 标准。我并不否认 C++ 2011 包含线程。确实如此,而且它与 C 2011 中包含的线程基本一致。您似乎对第一句话的第一个子句所说的内容有些错觉。对于以英语为母语的人来说,它明确指出“C 标准不包括线程”,这是不正确的;当前的 (2011) C 标准确实包括线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多