C语言 - pthread
pthread_create函数
原型:int pthread_create((pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
用法:#include <pthread.h>
功能:创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。
说明:thread:线程标识符;
attr:线程属性设置;
start_routine:线程函数的起始地址;
arg:传递给start_routine的参数;
返回值:成功,返回0;出错,返回-1。
举例:
#include <pthread.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/syscall.h> #define gettid() syscall(SYS_gettid) #define ARRAYSIZE 17 #define NUMTHREADS 4 struct ThreadData { int start, stop; int* array; }; void* squarer(void* td) { struct ThreadData* data=(struct ThreadData*) td; int start=data->start; int stop=data->stop; int* array=data->array; int i; pid_t tid1; tid1 = gettid(); //error at this statement//` printf("tid : %d\n",tid1); for (i=start; i<stop; i++) { // sleep(1); array[i]=i*i; printf("arr[%d] = [%d]\n",i,array[i]); printf("%d to %d", start, stop); } return NULL; } int main(void) { int array[ARRAYSIZE]; pthread_t thread[NUMTHREADS]; struct ThreadData data[NUMTHREADS]; int i; int tasksPerThread=(ARRAYSIZE+NUMTHREADS-1)/NUMTHREADS; for (i=0; i<NUMTHREADS; i++) { data[i].start=i*tasksPerThread; data[i].stop=(i+1)*tasksPerThread; data[i].array=array; } data[NUMTHREADS-1].stop=ARRAYSIZE; for (i=0; i<NUMTHREADS; i++) { pthread_create(&thread[i], NULL, squarer, &data[i]); } for (i=0; i<NUMTHREADS; i++) { pthread_join(thread[i], NULL); } for (i=0; i<ARRAYSIZE; i++) { printf("%d ", array[i]); } printf("\n"); return 0; }
编译: gcc -pthread 3.cc
运行: ./a.out