Linux中线程的使用(POSIX线程库)

1.概念

1.什么是线程?
	线程是程序的执行路线,而进程是运行中的程序,通俗讲,
线程就是进程的子任务,一个进程可以有多个子任务,即可以拥有多个线程。
2.线程的特点:
	1).不拥有自己独立的内存资源,共享进程的代码区、数据区、堆区(注意没有栈区)、
	环境变量和命令行参数、文件描述符、信号处理函数、当前目录、用户ID和
	组ID等资源.
	2).线程拥有自己独立的栈,因此也有自己独立的局部变量.
	3).线程的系统开销小,任务切换快,相对于进程来说。

2.线程函数

1.pthread_create()

int pthread_create (pthread_t* restrict thread,
					const pthread_attr_t* restrict attr,
					void* (*start_routine) (void*),
					void* restrict arg);

第一个参数为线程id,即所标识的该线程分配一个任务
第二参数为线程属性,一般为NULL,详细的可以看链接

线程属性

第三个参数为调用方法,传递一个函数指针。
第四个参数为函数的参数,如果是多形参的可以打包,传送一个结构体。
该函数成功返回0,失败返回错误码。
#include 
#include 
#include 

void *add(void *arg){
    int a = *(int*)arg;
    printf("%lu线程执行任务的结果为:%d\n",pthread_self(),2*a);
    return NULL;
}


int main(){
    pthread_t pid;
    int a = 2;
    int err = pthread_create(&pid, NULL, add, (void *)&a);
    if(err){
        perror("pthread_create() fail!");
        return -1;
    }
    pthread_join(pid, NULL);//等待线程结束,回收资源,第二个参数为传出的结束,该例子中add()返回NULL,故设置为NULL
    return 0;
}
PS E:\vscode\代码\线程> gcc .\pthread.c -lpthread
PS E:\vscode\代码\线程> .\a.exe
1线程执行任务的结果为:4

你可能感兴趣的:(归纳总结,笔记,linux)