我有一个函数,比方说,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 编译器对它们的支持非常好。和 Qt或 Poco或 Boost是一个跨平台的 C++ 库,特别是包装并发原语。
无论您使用何种并发机制,请注意 synchronization问题。
你总是和并发同步,至少要等待每个并发或并行子计算的结果
关于纯 C 中的并发编程 - Windows/Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066550/