Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

POSIX Thread Libraries


Pthreads หมายถึงมาตรฐาน POSIX (IEEE 1003.1c) ที่กำหนด API สำหรับการสร้างและการซิงโครไนซ์เธรด สิ่งนี้กำหนดข้อกำหนดสำหรับพฤติกรรมของเธรด ไม่ใช่การนำไปใช้ นักออกแบบ OS สามารถนำข้อกำหนดนี้ไปใช้ในลักษณะใดก็ได้ตามต้องการ ระบบจำนวนมากจึงใช้ข้อกำหนด Pthreads ส่วนใหญ่เป็นระบบประเภท UNIX รวมถึง Linux, Mac OS X และ Solaris แม้ว่า Windows จะไม่รองรับ Pthreads แต่มีการนำไปใช้งานของบริษัทอื่นสำหรับ Windows โปรแกรม C ที่แสดงในรูปที่ 4.9 สาธิต Pthreads 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);
}

โปรแกรม C แบบมัลติเธรดโดยใช้ Pthreads API