【问题标题】:Concurrent programing in plain C - Windows / Linux纯 C 中的并发编程 - Windows / Linux
【发布时间】:2014-02-27 11:04:15
【问题描述】:

我有一个函数,比如说callMe(args)。我希望能够同时调用我的函数 100 次(并发编程)。我的函数是用纯 C 编写的。我想让它在 Windows 和 Linux 上并发。

标准 C 库中是否有对此的内置支持?或者你能提供一些建议,我应该如何在 Linux/Windows 中做到这一点?

pthread 是否适合 Linux 环境?

【问题讨论】:

  • 我在windows上使用过pthreads没有问题。 MSVC 支持 OpenMP 2.5。 MSVC 的 ICC 支持 OpenMP(我认为是 4.0)。您还可以使用跨平台的 SDL_threads(与 pthreads 几乎相同)。您还可以使用跨平台的 Qt 线程。

标签: c linux windows concurrency


【解决方案1】:

您不能在纯标准C99 中编写并发程序。标准 C99 中没有并发编程;它需要一些操作系统特定的库。然而,最新的C11 标准(今天,2014 年 2 月的实现很少 - 我不知道!)开始添加对线程的支持。在 Linux 系统上,我今天建议坚持使用pthreads

您可以使用跨平台库(例如 GTK 中的 glib)来简化 Windows 和 Linux 之间的移植。在 Linux 上,它封装了 pthread。

我不了解 Windows,但有传言说 Glib(以及用于 GUI 应用程序的 GTK)可以在 Windows 和 Linux 之间实现源代码兼容编码

如果您的计算令人尴尬data parallel(就像某些矩阵数值计算一样),请考虑OpenCL(特别是因为它可以在GPGPUs 上运行)或OpenMP。如果它符合message passing 范式,请考虑MPI

据传 OpenCL、OpenMP、MPI 可为 Linux 和 Windows 启用源代码兼容编码。

C++11(与C 不同的语言)中,您有thread 支持,并且GCC 4.8.2 编译器很好地支持它们。而QtPocoBoost 是一个跨平台的C++ 库,特别是包装并发原语。

无论您使用何种并发机制,请注意synchronization 问题。

你总是与并发同步,至少要等待每个并发或并行子计算的结果

【讨论】:

  • 也有一些尝试将 pthreads 规范移植到 Windows,因此更喜欢它而不是 Windows 特定机制是有意义的
  • 由于我在函数调用之间不共享任何数据,我应该关心同步吗?好的,所以对于 linux,我可以使用 pthreads - Windows 怎么样? openMP 也适用于 Windows 吗?或者,也许您知道用于 Windows 的 abot operating system specific libraries? :)
【解决方案2】:

您必须针对不同的平台使用不同的功能。 类似不同的浏览器使用不同类型的 css 属性名称。

所以对于 linux/mac 你可以使用pthread 对于 Windows,您使用 CreateThread

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 2013-01-22
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多