zoukankan      html  css  js  c++  java
  • linux下线程以及pthread库

    一.概述

    linux中不区分进程和线程,都认为是个任务,都是创建一个task_struct.如何区分?线程是共享相同地址空间,而进程是独占地址空间.

    多线程共享同一进程的地址空间

    优点:

    通信方便,可以通过全局变量.

    缺点:

    访问共享数据时需要考虑同步和互斥.

    二.线程共享资源:

    可执行的指令

    静态数据

    进程中打开的文件描述符

    当前工作目录

    用户ID

    用户组ID

    三.线程私有资源:

    线程ID

    PC(程序计数器)和相关寄存器:保证不同线程执行不同的代码.

    堆栈

    错误号

    优先级

    执行状态和属性

    四.Linux线程库:

    pthread线程库:(POSIX)

    1.创建线程:

    2.回收线程(pthread_join):

    pthread_join(pthread_t thread, void **retval)

    *retval接收线程thread函数对应的返回值,比如return返回的值或者pthread_exit中的retval.(两者是等效的)

    3.结束线程(pthread_exit):

    结束当前线程,而exit是结束当前的进程.

    pthread_exit(void *retval)相当于return retval;可以是各种类型.

    retval可被其他线程通过pthread_join获取.

    示例:

    #include<stdio.h>
    #include<unistd.h>
    #include<pthread.h>
    
    void * task(void * param)
    {
        sleep(5);
        printf("hello
    ");
        //pthread_exit(NULL);
        //pthread_exit("子线程执行完毕"); //既可以返回NULL,也可以返回字符串.
        return "子线程执行完毕";
    }
    
    int main()
    {
        //初始化线程
        pthread_t tid;
    void *result;
    
        //创建线程
        int rc = pthread_create(&tid, NULL, task, NULL);
    
        if(rc)
        {
            printf("线程创建失败!
    ");
            return -1;
        }
        pthread_join(tid, &result);
        printf("创建主线程
    ");
        printf("result is %s
    ", result);
        pthread_exit(NULL);  //退出,并返回NULL,有个就不需要return 0了.
    }
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    python全栈学习--day57(响应式页面-@media介绍,移动端单位介绍,Bootstrap学习)
    网络编程-Socket介绍
    网络编程-五层协议详解
    python-封装
    python- 类的多态与多态性
    python-接口类与抽象类
    python-类的组合和使用
    python-类继承与重用
    python-面向对象编程小结
    python-属性的查找与绑定方法
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12737699.html
Copyright © 2011-2022 走看看