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

posted @ 2020-05-09 16:01  妇愁者  阅读(142)  评论(0编辑  收藏  举报