C 最常见的并行处理方法.pthreads
C++ most common parallel processing method. Pthreads?
只需要对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::thread
,std::mutex
,std::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的一部分加载和存储,对共享数据的可见性也是正确的。
如果您的需求更加复杂,则可以构建并发工具,或者使用它在其顶部建立的库是一个好主意。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- C 最常见的并行处理方法.pthreads
- 如何在使用 pthreads 时将方法指针作为函数参数传递C++
- Linux pthreads 上的 GCC 4.7 - 使用 __thread 的非平凡thread_local解决方法