1. 函数声明:

  int pthread_create(pthread_t *pid, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)

  • pid:线程创建成功后返回的线程标示
  • attr:线程属性结构,用于控制创建线程参数,后续介绍
  • start_routine:线程函数地址
  • arg: 传递给线程函数的参数

  返回值:success:0, failed:errno

2. 创建线程---不传参数:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *pth_fun(void *arg)
{
    printf("Hi, I am a pthread!\n");
    return 0;
}

int main(void)
{
    pthread_t pth;
    int rs = pthread_create(&pth, NULL, pth_fun, NULL);
    if(rs) {
        printf("pthread create error, reason = %d\n", rs);
        return -1;
    }
    sleep(1);
    printf("main will be end!\n");
    return 0;
}

 

3. 创建线程---传递结构体参数:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

struct mystruct {
    int age;
    char name[100];
};

void *pth_fun(void *arg)
{
    printf("Hi, I am a pthread!\n");
    struct mystruct *mydata;
    mydata = (struct mystruct*)arg;
    printf("name = %s, age = %d\n", mydata->name, mydata->age);
    return 0;
}

int main(void)
{
    pthread_t pth;
    struct mystruct zhangsan;
    memset(&zhangsan, 0, sizeof(zhangsan));
    zhangsan.age = 26;
    memcpy(zhangsan.name, "zhangsan", strlen("zhangsan"));
    int rs = pthread_create(&pth, NULL, pth_fun, &zhangsan);
    
    if(rs) {
        printf("pthread create error, reason = %d\n", rs);
        return -1;
    }
    sleep(2);
    printf("main will be end!\n");
    return 0;
}

运行结果:

kunmzhao@build-245:~/study$ gcc temp.c -o temp -lpthread
kunmzhao@build-245:~/study$ ./temp
Hi, I am a pthread!
name = zhangsan, age = 26
main will be end!
kunmzhao@build-245:~/study$

4. 创建线程---共享进程数据

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

int g_num = 100;

void *pth_fun(void *arg)
{
    printf("Hi, I am a pthread!\n");
    g_num++;
    return 0;
}

int main(void)
{
    printf("g_num = %d\n", g_num);
    pthread_t pth;
    int rs = pthread_create(&pth, NULL, pth_fun, NULL);
    
    if(rs) {
        printf("pthread create error, reason = %d\n", rs);
        return -1;
    }
    sleep(2);
    printf("main will be end!\n");
    printf("g_num = %d\n", g_num);
    return 0;
}

运行结果:

kunmzhao@build-245:~/study$ gcc temp.c -o temp -lpthread
kunmzhao@build-245:~/study$ ./temp
g_num = 100
Hi, I am a pthread!
main will be end!
g_num = 101

kunmzhao@build-245:~/study$ 

posted on 2021-04-08 16:24  阿明明  阅读(96)  评论(0)    收藏  举报