pthread_create()创建线程:
创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。
int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)*start_rtn(void*), void *arg);
返回值
返回0表示成功,返回-1表示失败。
参数
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
以上是线程创建的函数,我们看个代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <ctype.h>
#include <pthread.h>
#define MAX_THREAD 3 /* 线程的个数 */
unsigned long long main_counter = 0, counter[MAX_THREAD];
/* unsigned long long是比long还长的整数 */
void* thread_worker(void*);
int main(int argc, char* argv[])
{ int i, rtn, ch;
pthread_t pthread_id[MAX_THREAD] = {0}; /* 长整形数组存放线程id*/
for (i=0; i<MAX_THREAD; i++) {
rtn = pthread_create(&pthread_id[i], NULL, thread_worker, &i) ;
}
do {
/* 用户按一次回车执行下面的循环体一次。按q退出 */
unsigned long long sum = 0 ;
/* 求所有线程的counter的和 */
for (i=0; i<MAX_THREAD; i++)
{
/* 求所有counter的和 */
sum += counter[i];
}
printf("主counter:%llu/线程counter的sum:%llu", main_counter, sum);