C 最常见的并行处理方法.pthreads

C++ most common parallel processing method. Pthreads?

本文关键字:方法 pthreads 并行处理 常见      更新时间:2023-10-16

只需要对C 的并行处理方法的一些见解。我关于平行化的工作现在一直在C上,主要方法是使用Pthreads。

但是,我也与OpenMP和Cilkplus合作。

我只想问,在C 中平行代码的常见方式是什么?Pthreads是否被认为是好是坏实施?我可以继续在C ?

中使用它们

c 在其标准库中以不同的抽象层提供并发。


线程最低级别的方法是使用std ::线程与同步类std :: mutex,std :: simelod_lock,std :: procention_variable等。,fetch_add和Chorike),包括诸如栅栏之类的内存订购设施。

下一个较高的抽象级别利用std :: async,std :: future and std :: Promise。不必在这里独自控制多个线程,而只是专注于执行任务,这些任务可能是顺序或并行的,无论在特定情况下最适合什么。实施甚至可以自行决定何时并行工作。

最后,在C 17中,同时实现了已知的顺序STL-Algorithms,它们在内部使用并发,例如STD :: for_each和STD ::降低的表现类似于STD ::累积。结合尚未到来的功能,例如Coroutines,范围和执行上下文,可以导致非常健壮,性能,尤其是可读的代码。

总而言之,有几种可移植工具用于C 中的并行编程。与编程中的所有内容一样,应该使用一个可以获得的最抽象工具,以防止处理与实际问题无关的详细信息。因此,除非有充分的理由,否则我将不再使用C 中的pthreads。

作为首选,除非您的需求更复杂,否则请使用std::threadstd::mutexstd::condition_variable ETC

请参阅此处的文档:

http://en.cppreference.com/w/cpp/header/thread

http://en.cppreference.com/w/cpp/header/mutex

http://en.cppreference.com/w/cpp/header/future

http://en.cppreference.com/w/cpp/header/condition_variable

标准线程工具不是很棒或出血的边缘,但是对于大多数任务来说,它们足够好 - 当然可以替代Pthreads。

std::构建体的优点是,即使优化器的重新递减加载并作为其AS-IF PASS的一部分加载和存储,对共享数据的可见性也是正确的。

如果您的需求更加复杂,则可以构建并发工具,或者使用它在其顶部建立的库是一个好主意。