纯 C 中的并发编程 - Windows/Linux

标签 c linux windows concurrency

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

标准 C 库中是否内置了对此的支持?或者你能提供一些建议,我应该如何在 Linux/Windows 中执行此操作?

pthread 是否适用于 Linux 环境?

最佳答案

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

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

我不了解 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问题。

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

关于纯 C 中的并发编程 - Windows/Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066550/

相关文章:

c++ - 将 vector 投影到单位框的有效方法

linux - awk 查找两个字符串之间的第二条记录/awk 在文件中搜索

java - Ubuntu linux 32 位 eclipse 产品在 64 位 Ubuntu linux 中不工作

linux - 当进行系统调用时,是整个进程阻塞还是仅线程阻塞?

c# - 创建 XML 文件并赋予所有 Windows 帐户用户写入权限

c++ - 如何将光流场(float)映射到像素数据(char)以进行图像变形?

c - 如何理解DFT结果

python - 使用 ctypes 调用指向定义为静态的函数的函数指针

linux - Windows命令行GIT密码提示

c++ - 分发原始 msvcp.dll 或安装 vc_redist.exe