【问题标题】:Cross-platform concurrency lib in ISO CISO C 中的跨平台并发库
【发布时间】:2012-12-17 11:11:22
【问题描述】:

我想为 C 创建或找到一个简单的、独立于平台的并发(又名线程)库。我想在不使用依赖于操作系统的线程 API 的情况下实现它。它不需要是“真正的线程”,这就是我避免使用该术语的原因。实现这个库的程序应该作为一个单一的进程出现在操作系统中。

我研究了一些选项,例如 OpenMP、Windows 的 hacky pthreads 实现、Intel Cilk Plus、Duff 设备的变体(看起来很有希望)等等。我已经在这个网站上搜索了线索。是时候开辟自己的道路了。

我已经缩小了范围。我想在尽可能接近标准的 C 中执行此操作(更喜欢避免使用 C11、Boost 等)。理想情况下,我希望完全不使用外部库来执行此操作。如果必须使用它们,则不得使用运行时。

如果我知道从哪里开始,我完全有信心可以完成这项工作。我不是 C 方面的专家,但我是一个非常有能力的自学老师。我正在寻找的是关于实现这个库的建议、指示或想法。

目前的想法:我应该伪造或重新实现程序集的共享内存模型,使用程序计数器、返回指针等。叫我疯了...

相关:Threading Implementation(第一个答案。)我正在寻找更多这样的。

也相关:http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=54489

【问题讨论】:

  • 如果你还没有看过apr.apache.org
  • 顺便说一句,现在是 ISO C,ANSI 提供了很多输入,但他们只是在 ISO 出来时给它加盖印。
  • 感谢你们俩。 (我是刚参加 SO 的新手——我可以为你的 cmets 投票吗?)
  • 更改您的执行上下文以创建像线程这样的东西完全依赖于操作系统并且需要使用特定的 API。
  • 这就是为什么我专门询问代码并发或伪线程,而不是实际线程。

标签: c multithreading cross-platform iso


【解决方案1】:

我曾经在 Turbo C 中使用 setjmp 和 longjmp 构建了一个线程子系统(协作)(当然还有一个用于处理堆栈的小 asm)——这不是我会再做的事情。可以做到,但我认为您不使用非标准 C 的愿望是不明智的。

我们使用 pthreads(而 pthreads w32 在 Windows 平台上绰绰有余),这几乎是跨平台的,直到所有这些美妙的 C11 线程功能在所有地方都得到支持。我的建议是重新考虑你的厌恶——你正在为一个痛苦的世界做好准备。

【讨论】:

  • 我正在寻找切入点,以开始您所描述的内容。即,为了实现这一目标,我需要开始学习什么?我对一般性完全没问题,我只想知道从哪里开始学习,这样我才能找到实现这个目标的方法。疼痛和/或困难根本不是障碍。我很欣赏其他选项(例如 pthreads w32 和 APR)和建议(例如“pthreads 32 绰绰有余”),但它们最终并不是我想要的。
猜你喜欢
  • 2011-07-11
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多