POSIX线程

✍ dations ◷ 2025-11-20 02:37:38 #应用程序接口,IEEE标准,并发计算

POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX的线程标准,定义了创建和操纵线程的一套API。

实现POSIX 线程标准的库常被称作Pthreads,一般用于Unix-like POSIX 系统,如Linux、 Solaris。但是Microsoft Windows上的实现也存在,例如直接使用Windows API实现的第三方库pthreads-w32;而利用Windows的SFU/SUA子系统,则可以使用微软提供的一部分原生POSIX API。

Pthreads定义了一套C语言的类型、函数与常量,它以pthread.h 页面存档备份,存于互联网档案馆头文件和一个线程库实现。

Pthreads API中大致共有100个函数调用,全都以"pthread_"开头,并可以分为四类:

POSIX的Semaphore API可以和Pthreads协同工作,但这并不是Pthreads的标准。因而这部分API是以"sem_"打头,而非"pthread_"。

线程操纵函数(简介起见,省略参数):

线程属性函数:

mutex函数:

条件变量函数:

线程私有存储(Thread-local storage):

同步屏障函数


其它多线程同步函数:


工具函数:

信号量函数,包含在semaphore.h中:

共享内存函数,包含在sys/mman.h中,链接时使用rt库:

C中使用 Pthreads的示例:

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <pthread.h>static void wait(void){    time_t start_time = time(NULL);    while (time(NULL) == start_time)    {        /* do nothing except chew CPU slices for up to one second */    }}static void *thread_func(void *vptr_args){    int i;    for (i = 0; i < 20; i++)    {        fputs("  b\n", stderr);        wait();    }    return NULL;}int main(void){    int i;    pthread_t thread;    if (pthread_create(&thread, NULL, thread_func, NULL) != 0)    {        return EXIT_FAILURE;    }    for (i = 0; i < 20; i++)    {        puts("a");        wait();    }    if (pthread_join(thread, NULL) != 0)    {        return EXIT_FAILURE;    }    return EXIT_SUCCESS;}

这段程序创建了一个新线程,打印含有“b”的行,主线程打印含有“a”的行。当两个线程相互切换执行时输出结果为'a'和'b'交替出现。

相关

  • 胞管肾纲见内文胞管肾纲(学名:Secernentea),又名侧尾腺纲或尾感器纲,是线虫动物门之下的一个重要的纲。胞管肾纲之下的纲目计有:
  • 上郡上郡为战国时期魏国所置。秦惠王十年(前328年),魏国献上郡15县与秦,为秦初三十六郡之一,郡治肤施县(在今陕西省榆林市南)。西汉、东汉时沿置,郡治未变。汉灵帝末,因羌胡大扰而迁徙,曹
  • 德国足球协会德国足球协会(德语:Deutscher Fußball-Bund,简称DFB),乃德国足球界的官方机构,掌管德国所有足球事宜,包括管理各级别联赛、国家队等等,总部设于法兰克福,属欧洲足联和国际足联会员。
  • 拉斯阿尼马斯县拉斯阿尼马斯县(Las Animas County, Colorado)是位于美国科罗拉多州东南部的一个县,南邻新墨西哥州。面积12,368平方公里,是州中面积最大的县份。根据2000年人口普查,拉斯阿尼马
  • 生态工法生态工法(Ecological engineering methods),又可能称自然工法,是基于对物种保育、生物多样性、及永续发展的体认而提出的一种新思维和新的施工技术,其内涵包括扬弃因工程建设而阻
  • 约瑟芬·德·博阿尔内约瑟芬·德·博阿尔内(法语:Joséphine de Beauharnais,1763年6月23日-1814年5月29日),原名玛丽·罗丝·约瑟芙·塔契·德·拉·帕热利(法语:Marie Rose Josèphe Tascher de la Pag
  • 布加勒斯特国家艺术大学国家艺术大学(罗马尼亚语:Universitatea Naţională de Arte),是布加勒斯特的高等学府,学校是在亚历山大·伊昂·库扎大公的指令下建立,多年来曾有过以下几个官方名称:因着亚历山
  • 邪恶分身邪恶分身是一种普遍存在于西方大众文化的概念〈尤其是影剧作品〉中,意指一个跟自己完全一样能力也一样的分身;但是个性和价值观却完全相反,产生的原因可能是魔法或科幻因素,也有
  • ReactOSReactOS是一个开发与Windows NT和Windows 2000应用程序和硬件驱动程序兼容的开源操作系统的项目。ReactOS 主要是由C语言编写。部分组件则由C++编写,例如ReactOS 文件浏览器
  • 萨姆巴尔萨姆巴尔(Sambhar),是印度拉贾斯坦邦Jaipur县的一个城镇。总人口22293(2001年)。该地2001年总人口22293人,其中男性11602人,女性10691人;0—6岁人口3373人,其中男1762人,女1611人;识字