linux c线程控制 ——创建线程和终止线程

线程,我自己看到的两篇讲解比较生动形象的易于理解的博文,如下。


linux操作系统是支持多线程的,它在一个进程内生成了许多个线程。一个进程可以拥有一至多个线程。多线程相对于多进程还是有不少优点的:

  • 在多进程的情况下,每个进程都有自己独立的地址空间,而在多线程的情况下,同一进程内的的线程共享进程的地址空间。因此,创建一个新的进程时就要耗费时间来为其分配系统资源,而创建一个新的线程花费的时间就很少。
  • 在系统调度方面,由于进程地址空间独立而线程共享地址空间,线程间的切换速度要远远快过进程间的切换速度。
  • 在通信机制方面,进程间的数据空间相互独立,彼此通信要以专门的通信方式进行,通信时必须经过操作系统。而同一进程内的多个线程共享数据空间,一个线程的数据可以直接提供给其他线程使用,而不必经过操作系统。所以,线程间的通信更加方便和省时。
  • 可以提高应用程序的响应速度。
  • 可以提高多处理器的效率。
  • 可以改善程序的结构。对于要处理多个命令的应用程序,可以对每个命令的处理设计成一个线程,从而避免设计成大程序时造成的程序结构复杂。

    虽然线程在进程内共享地址空间,打开的文件描述符等资源。但是线程也有其私有的数据信息。

  • 线程号:每个线程都有一个唯一的线程号一一对应。
  • 寄存器
  • 堆栈
  • 信号掩码
  • 优先级
  • 线程私有的存储空间
    注意:编写linux下的多线程应用程序,需要头文件pthread.h,编译时需要加上-lpthread

    1、创建线程:

    线程的创建通过函数pthread_creat来完成。
    (1) 该函数声明及头文件如下:

#include<pthread.h>
int pthread_create(pthread_t *thread,pthread_attr_t *attr,
(void*)(*start_routine)(void*),void *arg);

编译链接参数
-lpthread

(2)返回值
若线程创建成功,则返回0。若线程创建失败,则返回出错编号。
返回成功时,由thread指向的内存单元被设置为新创建线程的线程ID。attr参数用于指定各种不同的线程属性。新创建的线程从start_routine函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_routine函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。
- thread:该参数为指向线程标识符的指针,当线程创建成功时,用来返回创建的线程id
- attr:该参数用来指定线程属性,NULL表示使用默认属性。
- start_routine:该参数是一个函数指针,指向线程创建后要调用的函数。
- arg:该参数指向传递该线程函数的参数。

(3)第二个参数是一个指向pthread_attr_t结构体(线程属性结构)的指针,该结构体如下:

  typedef struct
  {
             int                     detachstate;  //   线程的分离状态
  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值