Pthreads đề cập đến tiêu chuẩn POSIX (IEEE 1003.1c) xác định một API để tạo và đồng bộ hóa luồng. Điều này xác định đặc điểm kỹ thuật cho hành vi luồng, không phải là một triển khai. Các nhà thiết kế hệ điều hành có thể thực hiện các thông số kỹ thuật theo bất kỳ cách nào họ muốn. Vì vậy, nhiều hệ thống thực hiện đặc tả Pthreads; hầu hết là các hệ thống kiểu UNIX, bao gồm Linux, Mac OS X và Solaris. Mặc dù Windows nguyên bản không hỗ trợ Pthreads, một số triển khai của bên thứ ba dành cho Windows vẫn có sẵn. Chương trình C hiển thị trong Hình 4.9 trình bày API Pthreads cơ bản để xây dựng một chương trình đa luồng tính tổng của một số nguyên không âm trong một luồng riêng biệt. Các luồng riêng biệt bắt đầu thực thi trong một hàm được chỉ định trong chương trình Pthreads. Trong chương trình dưới đây, đây là hàm runner (). Tại thời điểm chương trình này bắt đầu, một luồng điều khiển bắt đầu trong hàm main (). Sau đó, main () tạo một luồng thứ hai bắt đầu điều khiển trong hàm runner (), sau một số lần khởi tạo,. Cả hai luồng đều chia sẻ tổng dữ liệu chung.
Ví dụ
#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); }
Chương trình C đa luồng sử dụng API Pthreads.