• linux多线程编程1


    线程基本概念以及优缺点:

    1、线程是操作系统执行任务的最小单位,进程是操作系统分配资源的最小单位。

    2、线程可以共享文件描述符表、每种信号的处理方式、当前的工作目录、用户ID以及组ID;

          线程id非共享,每个线程都拥有独立的栈空间(可以将每个线程看作一个函数),error变量非共享(每个errno是每个线程私有的值,可以通过 char *strerror(int errnum) 函数查看出错的原因)。

    3、线程优点:提高并发性、占用资源小、通信方便、开销小。

    linux线程的基本实现(包含文件头<pthread.h>,编译时需要加上-lpthread):

    1、线程的创建:创建线程通常使用的函数是pthread_create;

      函数原型:int pthread_create((pthread_t *thread, const pthread_attr_r *attr, void* (*start_routine)(void*), void *arg))

      函数传入值:thread:线程标识符,pthread_t标识无符号整数

            attr:线程属性,null表示默认属性(一般传null)

            start_routine:为一个函数指针,返回值为void*,可以看作线程的任务单元函数

            arg:传给函数的参数

      函数传出值:成功返回0,失败返回errno;

      线程id的获取:获取线程的id可以通过pthread_t pthread_self()来获取,相当于getpid();

    2、线程的退出:线程退出的方式

      函数原型:void pthread_exit(void *retval);

      函数传入值:retval:调用者线程的返回值,可由其他函数如pthread_join来检索获取。

      线程退出注意事项:

      1)线程中使用pthread_exit

      2)在线程中使用return(主控线程return表示退出整个进程)

      3)exit代表直接退出整个进程

    3、线程的回收

      函数原型:int pthread_join(pthread_t thread, void **retval);

      函数传入值:thread:创建的时候传出的参数,tid

            retval:代表传出线程的退出信息(return value)

      函数作用:阻塞等待至该线程执行完。当函数返回时,被等待的线程资源就会被回收。

     4、杀死线程

      函数原型:int pthread_cancel(pthread_t thread)

      函数传入值:thread:创建线程传入的参数,tid

      返回值:失败返回errno,成功返回0;

      注意点:1)当用此方式杀死线程时,退出状态为-1;

          2)此方式杀死的线程必须有取消点,即不能杀死while(1)里面是空实现这样的线程;

    5、线程的分离

      函数原型:int pthread_detach(pthread_t thread);

      函数参数:thread:创建线程传入的参数,tid

      返回值:成功返回0, 失败返回errno

      注意点:1)线程分离类似于于进程脱离终端变为后台进程类似,当线程退出时,会自动回收线程资源,而如果不是分离状态,线程必须保留它的线程ID,退出状态直到其它线程对它调用了pthread_join。

    文章参考:

    https://www.cnblogs.com/skynet/archive/2010/10/30/1865267.html

  • 相关阅读:
    Hashset;HashMap;ArrayList;
    排序方法(冒泡排序,直接选择排序,反转排序);
    父类引用指向子类的对象;
    SQL分支语句与循环语句
    ORCAL 数据库的约束以及SQL语言的四种类型
    Oracle基础数据类型与运算符
    集合
    数组的几种排序
    转换日期格式的工具类
    equals方法重写
  • 原文地址:https://www.cnblogs.com/zz1314/p/12858089.html
Copyright © 2020-2023  润新知