mySc day8

来源:互联网 发布:scratch趣味编程 ppt 编辑:程序博客网 时间:2024/06/10 06:27
查看线程
命令:
    ps -T -p <pid>    -T 开启线程查看
    top -H -p <pid> -H 开启线程查看
    htop    设置    F2
            F10
文件:
    /proc/PID/task        线程默认的名字和进程名相同
    /proc/PID/task/tid/comm        线程名
    
主线程
线程合并
可以由其他线程终止,回收资源
int pthread_join(pthread_t tid,void** retval)
一个用户定义的指针,可以用来返回值
线程分离
不能被其他线程终止,存储资源在它终止时由系统自动回收释放
int pthread_detach(pthread_t tid)

线程取消
取消点
如果线程接收到取消信号,到达指定位置才能取消
分类:    手动    void pthread_testcancel(tid)
    自动    引起阻塞的系统调用
操作:
    发送取消信号
        int pthread_canel(pthread_t thread)
    设置当前线程的取消状态
        int pthread_setcancel
    设置当前线程的取消类型
        int pthread_setcanceltype(int type,int* oldtype)
    设置取消点
        int pthread_setcancelstate(int state,int* oldstate);
注意:有些函数自带取消点,使用man 7 pthreads查看

取消点取消(默认):遇到取消点取消线程
    1.很多函数默认自带取消点printf()/sleep() *注意不同版本处理有差异,可以通过man 7 pthreads查看
    2.手动设置取消点pthread_testcancel()
强制取消:接受到取消信号立即取消线程
    设置pthread_setcanceltype(PTHREAD_CANCEL_DISABLE,NULL)
禁用线程取消
    设置pthread_setcancelstate(PTHREAD_CNACEL_DISABLE,NULL)
启用线程取消(默认)
    设置pthread_setcancelstate(PTHREAD_CANCEL_ABLE,NULL)    

线程取消测验命令:
thread_pthread [-d] [-p]
默认    取消点取消,并且是启用取消
-d    禁用取消
-a    强制取消
实现设计三个线程
    1.用作接收取消信号
    2.用来发送取消信号
    3.用来查看第一个线程是否被取消

int pthread_kill(pthread_t thread,int sig)
并发度
    设置并发度
    int pthread_setconcurrency(int level)
    获取并发度
    int pthread_getconcurrency(void)
自动释放资源
    void pthread_cleanup_pop(int execute)  execute 通常为0
    void pthread cleanup_

进程与线程的区别
    接口对比
        进程
            fork();exit/return;kill;wait/waitpid
        线程
            pthread_create();return/pthread_exit;pthread_kill/pthread_cancel;pthread_join
    粒度
        进程是资源分配和拥有的基本单位
        线程是处理器调度的基本单位
    资源
        进程有独立的地址空间
        线程共享进程的地址空间
    效率
        线程上下文切换比进程上下文切换要快的多
    稳定性
        子进程崩溃,不影响父进程与其他子进程
        任何一个线程崩溃,整个程序崩溃
    

原创粉丝点击