POSIX 线程库


Pthreads 是指定义一个线程创建和同步 API 的 POSIX 标准(IEEE 1003.1c)。这定义了线程行为的规范,而不是实现。该规范可以由 OS 设计人员以他们希望的任何方式实现。因此,许多系统都实现了 Pthreads 规范;其中大多数是 UNIX 类型系统,包括 Linux、Mac OS X 和 Solaris。尽管 Windows 本机不支持 Pthreads,但有一些适用于 Windows 的第三方实现。图 4.9 中显示的 C 程序演示了用于构建多线程程序的基本 Pthreads API,该程序计算单独线程中的非负整数的总和。在 Pthreads 程序中,单独的线程从指定函数开始执行。在下方的程序中,这是 runner() 函数。当这个程序开始时,一个单线程控制从 main() 开始。然后,main() 创建一个第二个线程,该线程在 runner() 函数中开始控制,在进行一些初始化之后。两个线程共用全局数据 sum。

示例

#include<pthread.h>
#include<stdio.h>
int sum;
/* this sum data is shared by the thread(s) */
/* threads call this function */
void *runner(void *param);
int main(int argc, char *argv[]){
   pthread t tid; /* the thread identifier */
   /* set of thread attributes */
   pthread attr t attr;
   if (argc != 2){
      fprintf(stderr,"usage: a.out 
");       return -1;    }    if (atoi(argv[1]) < 0){       fprintf(stderr,"%d must be >= 0
",atoi(argv[1]));       return -1;    }    /* get the default attributes */    pthread attr init(&attr); /* create the thread */    pthread create(&tid,&attr,runner,argv[1]);    /* wait for the thread to exit */    pthread join(tid,NULL);    printf("sum = %d
",sum); } /* The thread will now begin control in this function */ void *runner(void *param){    int i, upper = atoi(param);    sum = 0;    for (i = 1; i <= upper; i++)       sum += i;    pthread exit(0); }

使用 Pthreads API 的多线程 C 程序。

更新于: 2019-10-17

867 浏览

启动你的 职业生涯

完成课程获得认证

立即开始
广告