我正在使用Linux在C中创建一个多线程应用程序。
我不确定应该使用POSIX线程API还是OpenMP API。
使用这两种方法的利弊是什么?
编辑:
有人可以澄清这两个API是创建内核级线程还是用户级线程?
我正在使用Linux在C中创建一个多线程应用程序。
我不确定应该使用POSIX线程API还是OpenMP API。
使用这两种方法的利弊是什么?
编辑:
有人可以澄清这两个API是创建内核级线程还是用户级线程?
Answers:
OpenMP具有跨平台的优势,并且对于某些操作更简单。它以不同的方式处理线程,因为它为您提供了更高级别的线程选项,例如循环的并行化,例如:
#pragma omp parallel for
for (i = 0; i < 500; i++)
arr[i] = 2 * i;
如果您对此感兴趣,并且可以选择使用C ++,则我也建议您使用Threading Building Blocks。
Pthreads是用于显式生成线程和同步的较低级别的API。在这方面,它提供了更多控制。
这取决于两件事-您的代码库和在其中的位置。关键问题是-1)“您的代码库是否具有线程,线程池和控制原语(锁,事件等)”和2)“您是否正在开发可重用的库或普通应用程序?”
如果您的库具有线程工具(几乎总是基于某种PThread构建),请使用THOSE。如果您是图书馆开发人员,请花时间(如果可能)来构建它们。这样做是值得的-您可以组合比OpenMP更细粒度的高级线程。
相反,如果您时间紧迫,或者只是开发应用程序或使用第三方工具以外的工具,请使用OpenMP。您可以将其包装在一些宏中,并获得所需的基本并行性。
通常,OpenMP对于基本的多线程已经足够了。一旦开始要管理直接基于构建高度异步代码的系统资源,性能和接口问题就会挤占它的易用性优势。