线程概念(linux进程与线程学习笔记)

 进程
 
    进程有独立的地址空间
    
    linux为每个进程创建task_struct
    
    每个进程都参与内核调度,互不影响
    
 线程
 
    进程在切换时系统开销大
    
    很多操作系统引入了轻量级进程LWP
    
    同一个进程中的线程共享相同地址空间
    
    linux不区分进程、线程
    
 线程特点
 
    通常线程指的是共享相同地址空间的多个任务
    
    使用多线程的好处
    
        大大提高了任务切换的效率
        
        避免了额外的TLB & cache的刷新
        
 线程共享资源
 
    一个进程中的多个线程共享以下资源
    
        可执行的指令
        
        静态数据
        
        进程中打开的文件描述符
        
        当前工作目录
        
        用户ID
        
        用户组ID
        
 线程私有资源
 
    每个线程私有的资源包括
    
        线程ID(TID)
        
        PC(程序计数器)和相关寄存器
        
        堆栈
        
        错误号(error)
        
        优先级
        
        执行状态和属性
        
 Linux线程库
 
    pthread线程中提供了如下基本操作
    
        创建线程
        
        回收线程
        
        结束线程
        
    同步和互斥机制
    
        信号量
        
        互斥锁
        
 线程创建 - pthread_create
 
    #include<pthread.h>
    
    int pthread_create(pthread_t *thread,const 
                        线程对象
    pthread_attr_t *attr,void *(*routine)(void *),void *arg);
     线程属性              线程要执行的函数        传递给线性执行函数的参数
    
    成功返回0,失败返回错误码
    
    thread线程对象
    
    attr线程属性,NULL代表默认属性
    
    routine线程执行的函数
    
    arg传递给routine的参数
    
 线程回收 - pthread_join
 
    #include<pthread.h>
    
    int pthread_join(pthread_t thread,void **retval);
    
    成功返回0,失败返回错误码
    
    thread要回收的线程对象
    
    调用线程阻塞直到thread结束
    
    *retval接收线程thread的返回值
    
 线程结束 - pthread_exit
 
    #include<pthread.h>
    
    void pthread_exit(void *retval);
    
    结束当前线程
    
    retval可被其他线程通过pthread_join获取
    
    线程私有资源被释放
    
    编译指令
    
        gcc -o test test.c -lpthread

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值