Pthreads指的是POSIX標準(IEEE 1003.1c),定義了用於執行緒建立和同步的API。這定義了線程行為的規範,而不是實作。規範可以由作業系統設計者以任何他們希望的方式來實現。因此,許多系統實作了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 </p><p>"); return -1; } if (atoi(argv[1]) < 0){ fprintf(stderr,"%d must be >= 0</p><p>",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</p><p>",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程式。
以上是POSIX線程庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!