POSIX线程库

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

示例

#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 \n");
      return -1;
   }
   if (atoi(argv[1]) < 0){
      fprintf(stderr,"%d must be >= 0\n",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\n",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程序。