POSIX线程程序设计(中文版)
Unix_Linux_Windows_OpenMP多线程编程

Unix_Linux_Windows_OpenMP多线程编程第三章 Unix/Linux 多线程编程[引言]本章在前面章节多线程编程基础知识的基础上,着重介绍 Unix/Linux 系统下的多线程编程接口及编程技术。
3.1 POSIX 的一些基本知识POSIX 是可移植操作系统接口(Portable Operating SystemInterface)的首字母缩写。
POSIX 是基于 UNIX 的,这一标准意在期望获得源代码级的软件可移植性。
换句话说,为一个 POSIX 兼容的操作系统编写的程序,应该可以在任何其它的 POSIX 操作系统(即使是来自另一个厂商)上编译执行。
POSIX 标准定义了操作系统应该为应用程序提供的接口:系统调用集。
POSIX是由 IEEE(Institute of Electrical andElectronic Engineering)开发的,并由 ANSI(American National Standards Institute)和 ISO(International StandardsOrganization)标准化。
大多数的操作系统(包括 Windows NT)都倾向于开发它们的变体版本与 POSIX 兼容。
POSIX 现在已经发展成为一个非常庞大的标准族,某些部分正处在开发过程中。
表 1-1 给出了 POSIX 标准的几个重要组成部分。
POSIX 与 IEEE 1003 和 2003 家族的标准是可互换的。
除 1003.1 之外,1003 和 2003 家族也包括在表中。
管理 POSIX 开放式系统环境(OSE) 。
IEEE 在 1995 年通过了这项标准。
ISO 的1003.0版本是 ISO/IEC 14252:1996。
被广泛接受、用于源代码级别的可移植性标准。
1003.1 提供一个操作系统的C 语1003.1 言应用编程接口(API) 。
IEEE 和 ISO 已经在 1990 年通过了这个标准,IEEE 在1995 年重新修订了该标准。
Posix 多线程编程学习笔记(六)—共享内存(1)

off是要映射字节在文件中的起始偏移量。
通常将其设置为0。
prot参数说明对映射存储区的保护要求。
可将prot参数指定为PROT_NONE,或者是PROT_READ(映射区可读),PROT_WRITE(映射区可写),PROT_EXEC(映射区可执行)任意组合的按位或,也可以是PROT_NONE(映射区不可访问)。
对指定映射存储区的保护要求不能超过文件open模式访问权限。
flag参数影响映射区的多种属性:MAP_FIXED返回值必须等于addr.因为这不利于可移植性,所以不鼓励使用此标志。
MAP_SHARED这一标志说明了本进程对映射区所进行的存储操作的配置。
此标志指定存储操作修改映射文件。
MAP_PRIVATE本标志导致对映射区建立一个该映射文件的一个私有副本。
所有后来对该映射区的引用都是引用该副本,而不是原始文件。
要注意的是必须指定MAP_FIXED或MAP_PRIVATE标志其中的一个,指定前者是对存储映射文件本身的一个操作,而后者是对其副本进行操作。
mmap成功返回后,fd参数可以关闭。
该操作对于由mmap建立的映射关系没有影响。
为从某个进程的地址空间删除一个映射关系,我们调用munmap.2.名称::munmap功能:解除存储映射头文件:#include<sys/mman.h>函数原形:int munmap(caddr_t addr,size_t len);参数:addr指向映射存储区的起始地址len映射的字节返回值:若成功则返回0,若出错则返回-1其中addr参数是由mmap返回的地址,len是映射区的大小。
再次访问这些地址导致向调用进程产生一个SIGSEGV信号。
如果被映射区是使用MAP_PRIVATE标志映射的,那么调用进程对它所作的变动都被丢弃掉。
内核的虚存算法保持内存映射文件(一般在硬盘上)与内存映射区(在内存中)的同步(前提它是MAP_SHARED内存区)。
这就是说,如果我们修改了内存映射到某个文件的内存区中某个位置的内容,那么内核将在稍后某个时刻相应地更新文件。
POSIX thread

POSIX 线程详解 1POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段。
在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程。
其中还涉及大量幕后细节,读完本系列文章,您完全可以运用POSIX 线程创建多线程程序。
线程是有趣的了解如何正确运用线程是每一个优秀程序员必备的素质。
线程类似于进程。
如同进程,线程由内核按时间分片进行管理。
在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。
而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。
那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。
不同的线程可以存取内存中的同一个变量。
所以,程序中的所有线程都可以读或写声明过的全局变量。
如果曾用 fork() 编写过重要代码,就会认识到这个工具的重要性。
为什么呢?虽然 fork() 允许创建多个进程,但它还会带来以下通信问题: 如何让多个进程相互通信,这里每个进程都有各自独立的内存空间。
对这个问题没有一个简单的答案。
虽然有许多不同种类的本地 IPC (进程间通信),但它们都遇到两个重要障碍:强加了某种形式的额外内核开销,从而降低性能。
对于大多数情形,IPC 不是对于代码的“自然”扩展。
通常极大地增加了程序的复杂性。
双重坏事: 开销和复杂性都非好事。
如果曾经为了支持 IPC 而对程序大动干戈过,那么您就会真正欣赏线程提供的简单共享内存机制。
由于所有的线程都驻留在同一内存空间,POSIX 线程无需进行开销大而复杂的长距离调用。
只要利用简单的同步机制,程序中所有的线程都可以读取和修改已有的数据结构。
而无需将数据经由文件描述符转储或挤入紧窄的共享内存空间。
仅此一个原因,就足以让您考虑应该采用单进程/多线程模式而非多进程/单线程模式。
线程是快捷的不仅如此。
线程同样还是非常快捷的。
与标准 fork() 相比,线程带来的开销很小。
linux多线程编程的书 -回复

linux多线程编程的书-回复
以下是一些关于Linux多线程编程的书籍推荐:
1.《Unix/Linux多线程程序设计》:这本书详细介绍了Unix/Linux环境下的多线程编程技术,包括POSIX threads API、线程同步机制、线程间的通信等内容。
2.《Linux多线程服务端编程》:这本书主要针对Linux环境下的高性能、高并发服务器编程,深入讲解了多线程、异步I/O、锁机制、线程池等关键技术。
3.《Linux多线程编程》:这本书从理论和实践两个角度出发,全面介绍了Linux多线程编程的相关知识,包括线程的创建和管理、线程间的同步和通信、线程调度策略等内容。
4.《Linux/Posix多线程程序设计》:这本书详细介绍了Linux/Posix环境下的多线程编程技术,包括线程的创建和终止、线程间的同步和通信、线程的调度和优先级等内容。
5.《Java多线程编程实战》:虽然这本书主要是关于Java多线程编程的,但是其中很多概念和技巧也适用于Linux环境下的多线程编程,特别是对于那些使用Java进行Linux服务器开发的开发者来说,非常有参考价值。
以上这些书籍都是比较经典的多线程编程参考书籍,可以根据自己的需求和背景选择适合自己的书籍进行学习。
POSIX标准理解-新版.pdf

POSIX标准理解POSIX标准总体分析POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准。
它包括了系统应用程序接口(简称API),以及实时扩展[C语言]。
该标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境来支持源代码级的可移植性。
现在,标准主要提供了依赖C语言的一系列标准服务,再将来的版本中,标准将致力于提供基于不同语言的规范。
该标准对核心需求部分定义了一系列任何编程语言都通用的服务,这一部分服务主要从其功能需求方面阐述,而非定义依赖于编程语言的接口。
语言规范主要有两部分组成。
一部分包括了访问核心服务的编程语言的标准接口,这些核心服务为标准中基于编程语言的核心需求部分所定义;另一部分包含了一个特殊语言服务的标准接口。
基于任何语言,与该标准一致的执行都必须遵循语言规范的任何章节。
该标准一共被分为四个部分:(1)陈述的范围和一系列标准参考(第一章);(2)定义和总概念;(第二章)(3)各种接口设备;(第三章到第九章,第十一章到第十五章)(4)数据交换格式;(第十章)该标准的主要目的有:(1)面向应用(2)定义接口,而不是它的具体实现;(3)涉及资源和可移植性,而非对象;(4)基于c语言;(5)无超级用户,无系统管理;(6)最小限度的接口,最小限度的定义;(7)应用领域广泛;(8)对以前的实现进行最小限度改变;(9)对原有程序代码做最小的修改;(10)实时扩展;以下就对各个章节做简要分析。
第一章概述1.1范围定义范围的关键要素有:(1)定义足够的一套功能适用于实时应用程序领域的重要部分;(2)定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统的确定性的响应;1.2 一致性系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具。
在遵循于该标准的实现中,一种一致性文档是需要用到的,它必须具有与该标准相同的结构,包含有全名,数字,和标准所指示的日期,以及头文件<limits.h>和<unistd.h>中的界限值等等。
posix接口实现方法

posix接口实现方法以POSIX接口实现方法为标题的文章POSIX(Portable Operating System Interface)是一种操作系统接口标准,旨在提供可移植性和互操作性。
POSIX接口定义了一组函数、命令和工具,用于应用程序与操作系统进行通信和交互。
本文将介绍一些常见的POSIX接口实现方法,并探讨它们在不同情况下的应用。
一、文件和目录操作接口1. 创建文件:使用open函数创建一个新文件,可以指定文件的权限和打开模式。
如果文件已存在,则会打开该文件;如果文件不存在,则会创建一个新文件。
2. 读取文件内容:使用read函数从文件中读取数据。
该函数要求提供文件描述符、缓冲区和读取的字节数,返回实际读取的字节数。
3. 写入文件内容:使用write函数将数据写入文件。
该函数要求提供文件描述符、缓冲区和写入的字节数,返回实际写入的字节数。
4. 关闭文件:使用close函数关闭文件,释放文件描述符。
5. 创建目录:使用mkdir函数创建一个新目录。
可以指定目录的权限和路径。
6. 删除目录:使用rmdir函数删除一个空目录。
7. 遍历目录:使用opendir函数打开一个目录,使用readdir函数读取目录中的文件和子目录。
二、进程管理接口1. 创建进程:使用fork函数创建一个新进程,该进程是调用进程的副本。
父进程与子进程共享代码段,但拥有独立的数据段和堆栈。
2. 等待进程结束:使用wait函数等待子进程结束,并获取子进程的返回状态。
3. 进程替换:使用exec函数族中的execve函数将当前进程替换为新的可执行文件。
该函数要求提供新程序的路径和参数。
4. 进程退出:使用exit函数终止当前进程,并返回一个退出状态。
5. 进程间通信:使用管道、共享内存、信号量等机制实现进程间的通信和同步。
三、线程管理接口1. 创建线程:使用pthread_create函数创建一个新线程。
该函数要求提供线程属性、线程入口函数和参数。
C程序设计语言(完美中文版)

C程序设计语言(完美中文版)C语言是一种广泛使用的编程语言,以其高效性和灵活性而著称。
它是一种结构化编程语言,被广泛应用于系统编程、嵌入式系统、操作系统、数据库、网络编程等领域。
C语言的特点是简洁、高效、灵活,并且与硬件紧密相关,使得程序员可以更深入地理解计算机的工作原理。
在C语言中,所有的程序都是由函数组成的。
函数是C语言中的基本构建块,可以用来执行特定的任务。
C语言提供了丰富的库函数,可以用来实现各种功能,例如输入输出、字符串处理、数学运算等。
C语言还支持用户自定义函数,使得程序员可以创建自己的函数来满足特定的需求。
C语言中的数据类型包括基本数据类型和复合数据类型。
基本数据类型包括整型、浮点型、字符型等,用于表示基本的数据。
复合数据类型包括数组、结构体、联合体等,用于表示复杂的数据结构。
C语言还支持指针,可以用来实现内存管理和动态数据结构。
C语言中的控制结构包括条件语句、循环语句和跳转语句。
条件语句用于根据条件的真假来执行不同的代码块。
循环语句用于重复执行一段代码,直到满足特定的条件。
跳转语句用于在程序中实现跳转,例如跳转到循环的开始或结束。
C语言还提供了丰富的输入输出函数,可以用来从用户那里获取输入,并将输出结果显示给用户。
这些函数包括printf、scanf、puts、gets等。
通过这些函数,程序员可以与用户进行交互,获取用户输入的数据,并将处理结果展示给用户。
C语言是一种功能强大、灵活多变的编程语言。
它提供了丰富的数据类型、控制结构和输入输出函数,使得程序员可以高效地实现各种功能。
学习C语言可以帮助程序员更好地理解计算机的工作原理,为后续学习其他编程语言打下坚实的基础。
C程序设计语言(完美中文版)2. 模块化编程:C语言支持模块化编程,可以将程序划分为多个模块,每个模块包含一组相关的函数和数据。
这种模块化编程方式有助于提高代码的可读性、可维护性和可重用性。
程序员可以将常用的功能封装成模块,并在需要时引入这些模块,从而简化程序的开发过程。
posix接口标准

posix接口标准POSIX接口标准简介POSIX(可移植操作系统接口)是一组定义了操作系统接口的标准。
它的目的是为了实现操作系统的可移植性,使得开发者可以在不同的操作系统上编写可移植的软件。
POSIX定义了许多功能、命令以及系统调用,以便于开发者编写可移植的软件,并且保持对不同系统的一致性。
POSIX标准的内容POSIX接口标准包含了许多不同的组件,以下是其中几个重要的组件:1. 文件和目录操作:POSIX定义了一系列函数,使得开发者可以对文件和目录进行读、写、创建等操作。
例如,开发者可以使用open()函数打开一个文件,并使用read()和write()函数进行数据的读取和写入。
此外,POSIX还定义了一些标准的文件和目录路径,以及文件权限的控制。
2. 进程控制:POSIX提供了一套用于进程控制的函数。
开发者可以使用fork()函数创建一个新的进程,使用exec()函数来加载新程序并替换当前进程的地址空间,以及使用wait()函数等待一个子进程的结束。
这些函数使得进程的创建、管理和通信变得更加容易。
3. 线程控制:POSIX对线程控制也进行了定义。
通过使用线程,可以实现并发执行的能力,从而提高程序的性能。
POSIX定义了线程的创建、同步和销毁等操作。
开发者可以使用pthread_create()函数创建线程,使用mutex和condition variable等机制进行线程同步。
4. 信号处理:POSIX提供了一套用于处理信号的函数,使得开发者可以对软件中出现的不同事件做出响应。
开发者可以使用signal()函数来定义信号的处理程序,以及使用sigprocmask()来管理进程的信号屏蔽集。
5. 文件I/O:POSIX定义了标准的文件I/O接口和相关函数。
开发者可以使用fopen()和fclose()函数打开和关闭文件,使用fgets()和fputs()函数进行文件的读写操作,以及使用fseek()和ftell()函数进行文件指针的定位和查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
POSIX 多线程程序设计Blaise Barney, Lawrence Livermore National Laboratory目录表1.摘要2.Pthreads 概述1.什么是线程?2.什么是Pthreads?3.为什么使用Pthreads?4.使用线程设计程序3.Pthreads API编译多线程程序4.线程管理1.创建和终止线程2.向线程传递参数3.连接(Joining)和分离(Detaching)线程4.栈管理5.其它函数5.互斥量(Mutex Variables)1.互斥量概述2.创建和销毁互斥量3.锁定(Locking)和解锁(Unlocking)互斥量6.条件变量(Condition Variable)1.条件变量概述2.创建和销毁条件变量3.等待(Waiting)和发送信号(Signaling)7.没有覆盖的主题8.Pthread 库API参考9.参考资料在多处理器共享内存的架构中(如:对称多处理系统SMP),线程可以用于实现程序的并行性。
历史上硬件销售商实现了各种私有版本的多线程库,使得软件开发者不得不关心它的移植性。
对于UNIX系统,IEEE POSIX 1003.1标准定义了一个C语言多线程编程接口。
依附于该标准的实现被称为POSIX theads 或Pthreads。
该教程介绍了Pthreads的概念、动机和设计思想。
内容包含了Pthreads API主要的三大类函数:线程管理(Thread Managment)、互斥量(Mutex Variables)和条件变量(Condition Variables)。
向刚开始学习Pthreads的程序员提供了演示例程。
适于:刚开始学习使用线程实现并行程序设计;对于C并行程序设计有基本了解。
不熟悉并行程序设计的可以参考EC3500: Introduction To Parallel Computing。
什么是线程?•技术上,线程可以定义为:可以被操作系统调度的独立的指令流。
但是这是什么意思呢?•对于软件开发者,在主程序中运行的“函数过程”可以很好的描述线程的概念。
•进一步,想象下主程序(a.out)包含了许多函数,操作系统可以调度这些函数,使之同时或者(和)独立的执行。
这就描述了“多线程”程序。
•怎样完成的呢?•在理解线程之前,应先对UNIX进程(process)有所了解。
进程被操作系统创建,需要相当多的“额外开销”。
进程包含了程序的资源和执行状态信息。
如下:o进程ID,进程group ID,用户ID和group IDo环境o工作目录o程序指令o寄存器o栈o堆o文件描述符o信号动作(Signal actions)o共享库o进程间通信工具(如:消息队列,管道,信号量或共享内存)UNIX PROCESS THREADS WITHIN A UNIXPROCESS•线程使用并存在于进程资源中,还可以被操作系统调用并独立地运行,这主要是因为线程仅仅复制必要的资源以使自己得以存在并执行。
•独立的控制流得以实现是因为线程维持着自己的:o堆栈指针o寄存器o调度属性(如:策略或优先级)o待定的和阻塞的信号集合(Set of pending and blocked signals)o线程专用数据(TSD:Thread Specific Data.)•因此,在UNIX环境下线程:o存在于进程,使用进程资源o拥有自己独立的控制流,只要父进程存在并且操作系统支持o只复制必可以使得独立调度的必要资源o可以和其他线程独立(或非独立的)地共享进程资源o当父进程结束时结束,或者相关类似的o是“轻型的”,因为大部分额外开销已经在进程创建时完成了•因为在同一个进程中的线程共享资源:o一个线程对系统资源(如关闭一个文件)的改变对所有其它线程是可以见的o两个同样值的指针指向相同的数据o读写同一个内存位置是可能的,因此需要成员显式地使用同步什么是Pthreads?•历史上,硬件销售商实现了私有版本的多线程库。
这些实现在本质上各自不同,使得程序员难于开发可移植的应用程序。
•为了使用线程所提供的强大优点,需要一个标准的程序接口。
对于UNIX 系统,IEEE POSIX 1003.1c(1995)标准制订了这一标准接口。
依赖于该标准的实现就称为POSIX threads 或者Pthreads。
现在多数硬件销售商也提供Pthreads,附加于私有的API。
•Pthreads 被定义为一些C语言类型和函数调用,用pthread.h头(包含)文件和线程库实现。
这个库可以是其它库的一部分,如libc。
为什么使用Pthreads?•使用Pthreads的主要动机是提高潜在程序的性能。
•当与创建和管理进程的花费相比,线程可以使用操作系统较少的开销,管理线程需要较少的系统资源。
例如,下表比较了fork()函数和pthread_create()函数所用的时间。
计时反应了50,000个进程/线程的创建,使用时间工具实现,单位是秒,没有优化标志。
备注:不要期待系统和用户时间加起来就是真实时间,因为这些SMP系统有多个CPU同时工作。
这些都是近似值。
(8cpus/node)INTEL 2.4 GHz Xeon (2cpus/node)54.95 1.54 20.78 1.64 0.67 0.90INTEL 1.4 GHz Itanium2 (4cpus/node)54.54 1.07 22.22 2.03 1.26 0.67fork_vs_thread.txt•在同一个进程中的所有线程共享同样的地址空间。
较于进程间的通信,在许多情况下线程间的通信效率比较高,且易于使用。
•较于没有使用线程的程序,使用线程的应用程序有潜在的性能增益和实际的优点:o CPU使用I/O交叠工作:例如,一个程序可能有一个需要较长时间的I/O操作,当一个线程等待I/O系统调用完成时,CPU可以被其它线程使用。
o优先/实时调度:比较重要的任务可以被调度,替换或者中断较低优先级的任务。
o异步事件处理:频率和持续时间不确定的任务可以交错。
例如,web服务器可以同时为前一个请求传输数据和管理新请求。
•考虑在SMP架构上使用Pthreads的主要动机是获的最优的性能。
特别的,如果一个程序使用MPI在节点通信,使用Pthreads可以使得节点数据传输得到显著提高。
•例如:o MPI库经常用共享内存实现节点任务通信,这至少需要一次内存复制操作(进程到进程)。
o Pthreads没有中间的内存复制,因为线程和一个进程共享同样的地址空间。
没有数据传输。
变成cache-to-CPU或memory-to-CPU的带宽(最坏情况),速度是相当的快。
o比较如下:PlatformMPI SharedMemory Bandwidth(GB/sec)Pthreads WorstCaseMemory-to-CPUBandwidth(GB/sec)AMD 2.4 GHzOpteron1.2 5.3IBM 1.9 GHzPOWER5 p5-5754.1 16IBM 1.5 GHz2.1 4POWER40.3 4.3Intel 1.4 GHzXeon1.8 6.4Intel 1.4 GHzItanium 2Pthreads 概述使用线程设计程序并行编程:•在现代多CPU机器上,pthread非常适于并行编程。
可以用于并行程序设计的,也可以用于pthread程序设计。
•并行程序要考虑许多,如下:o用什么并行程序设计模型?o问题划分o加载平衡(Load balancing)o通信o数据依赖o同步和竞争条件o内存问题o I/O问题o程序复杂度o程序员的努力/花费/时间o...•包含这些主题超出本教程的范围,有兴趣的读者可以快速浏览下“Introduction to Parallel Computing”教程。
•大体上,为了使用Pthreads的优点,必须将任务组织程离散的,独立的,可以并发执行的。
例如,如果routine1和routine2可以互换,相互交叉和(或者)重叠,他们就可以线程化。
•拥有下述特性的程序可以使用pthreads:o工作可以被多个任务同时执行,或者数据可以同时被多个任务操作。
o阻塞与潜在的长时间I/O等待。
o在某些地方使用很多CPU循环而其他地方没有。
o对异步事件必须响应。
o一些工作比其他的重要(优先级中断)。
•Pthreads 也可以用于串行程序,模拟并行执行。
很好例子就是经典的web 浏览器,对于多数人,运行于单CPU的桌面/膝上机器,许多东西可以同时“显示”出来。
•使用线程编程的几种常见模型:o管理者/工作者(Manager/worker):一个单线程,作为管理器将工作分配给其它线程(工作者),典型的,管理器处理所有输入和分配工作给其它任务。
至少两种形式的manager/worker模型比较常用:静态worker池和动态worker池。
o管道(Pipeline):任务可以被划分为一系列子操作,每一个被串行处理,但是不同的线程并发处理。
汽车装配线可以很好的描述这个模型。
o Peer:和manager/worker模型相似,但是主线程在创建了其它线程后,自己也参与工作。
共享内存模型(Shared Memory Model):•所有线程可以访问全局,共享内存•线程也有自己私有的数据•程序员负责对全局共享数据的同步存取(保护)线程安全(Thread-safeness):•线程安全:简短的说,指程序可以同时执行多个线程却不会“破坏“共享数据或者产生“竞争”条件的能力。
•例如:假设你的程序创建了几个线程,每一个调用相同的库函数:o这个库函数存取/修改了一个全局结构或内存中的位置。
o当每个线程调用这个函数时,可能同时去修改这个全局结构活内存位置。
o如果函数没有使用同步机制去阻止数据破坏,这时,就不是线程安全的了。
•如果你不是100%确定外部库函数是线程安全的,自己负责所可能引发的问题。
•建议:小心使用库或者对象,当不能明确确定是否是线程安全的。
若有疑虑,假设其不是线程安全的直到得以证明。
可以通过不断地使用不确定的函数找出问题所在。
Pthreads API•Pthreads API在ANSI/IEEE POSIX 1003.1 – 1995标准中定义。
不像MPI,该标准不是免费的,必须向IEEE购买。
•Pthreads API中的函数可以非正式的划分为三大类:1.线程管理(Thread management):第一类函数直接用于线程:创建(creating),分离(detaching),连接(joining)等等。
包含了用于设置和查询线程属性(可连接,调度属性等)的函数。
2.互斥量(Mutexes):第二类函数是用于线程同步的,称为互斥量(mutexes),是"mutual exclusion"的缩写。