关于线程

来源:互联网 发布:qt程序员常用单词 编辑:程序博客网 时间:2024/05/14 23:50

一:什么是线程?

    线程:线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

     在Linux中,并没有真正的线程。linux中的线程是用进程模拟的,所以说其本质是进程。

二:进程和线程的区别

     1 进程是资源分配的基本单位,线程是调度的基本单位。

       进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会响到其他进程。而多        线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子        线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。

     2 调用函数不一样

          进程的创建: fork()

          线程的调用函数:pthread_create()

     3 资源管理

       进程:进程本身是资源分配的基本单位,因而它的资源都是独立的,如果有多进程间的共享资源,就要用到进程间的通        信方式了,比如共享内存。共享数据就放在共享内存去,大家都可以访问,为保证数据写入的安全,加上信号量一同使        用。

       线程:线程间要使用共享资源不需要用共享内存,直接使用全局变量即可。

     4 通信方式


      进程:A.共享内存    B.消息队列    C.信号量    D.有名管道    E.无名管道    F.信号

          G.文件        H.socket

      线程:线程间的通信方式上述进程间的方式都可沿用,且还有自己独特的几种:

          A.互斥量      B.自旋锁      C.条件变量  D.读写锁      E.线程信号

          G.全局变量

     值得注意的是,线程间通信用的信号不能采用进程间的信号,因为信号是基于进程为单位的,而线程是共属于同一进程空      间的。故而要采用线程信号。

     综上,进程间通信手段有8种。线程间通信手段有13种。


线程的创建:


函数编写:


运行结果:


  

线程等待:


函数编写:


结果显示:


返回结果打印了子线程的tid 和返回值  ,而不是报告子线程消失,说明主线程等待了子线程。


线程终止的三种情况:

1 :正常结束

2: 调用pthread_exit() 结束

3: 被其他线程终止  pthread_cancel()


代码实现:




原创粉丝点击