我正在使用Linux用C创建一个多线程应用程序.

我不确定是应该使用POSIX线程API还是OpenMP API.

优点和缺点是什么;使用这两种方法的缺点是什么?

Edit:

有人能澄清一下这两个API是创建kernel-level个线程还是user-level个线程吗?

推荐答案

Pthread和OpenMP代表了两种完全不同的多处理范例.

Pthreads是用于处理线程的非常低级的API.因此,您可以非常细粒度地控制线程管理(创建/联接/等)、互斥锁等.这是相当简单的.

另一方面,OpenMP的级别要高出much,可移植性更强,并且不会限制您使用C语言,它也比pthread更容易扩展.这方面的一个具体示例是OpenMP的工作共享 struct ,它允许您相对轻松地将工作分配到多个线程.(另见维基百科的pros and cons list.)

也就是说,您实际上没有提供关于您正在实现的具体程序的详细信息,或者您计划如何使用它,因此推荐一种API而不是另一种API几乎是不可能的.

C++相关问答推荐

C如何显示字符串数组中的第一个字母

这是一个合法的C Strdup函数吗?

如何在C中通过套接字自定义数据类型读取原始变量?

如何将字符**传递给需要常量字符指针的常量数组的函数

对重叠字符串使用MemMove

是否可以通过调用两个函数来初始化2D数组?示例:ARRAY[STARTING_ROWS()][STARTING_COLUMNS()]

C整型和_泛型.哪些类型是兼容的?

C语言中的外部关键字

Zlib:解压缩大文件导致";无效代码长度设置";错误

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

不带Malloc的链表

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

表达式x&;&;(~x)应该返回1还是0?它依赖于编译器吗?

C23标准是否向后兼容?

C中的char**v*char[]

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

在我的第一个C语言中观察到的错误';你好世界';程序

分支预测和UB(未定义的行为)

为什么实现文件中的自由函数默认没有内部链接?

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?