一、线程效率

  • 线程的创建与销毁,活动都会消耗大量的系统资源,如果需要大量频繁的创建销毁线程,可以选用线程池来达到效果,既减少资源消耗,又提高效率。

    二、线程安全

    2.1 线程资源

    共享资源

  1. 文件描述符表
  2. 每种信号的处理方式
  3. 当前工作目录
  4. 用户ID和组ID
  5. 内存地址空间 (.text/.data/.bss/heap/共享库)

    非共享资源

  6. 线程id

  7. 处理器现场和栈指针(内核栈)
  8. 独立的栈空间(用户空间栈)
  9. errno变量
  10. 信号屏蔽字
  11. 调度优先级

    2.2 概念

    线程安全:简单来说线程安全就是多个线程并发同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的;
    线程不安全:说完了线程安全,线程不安全的问题就很好解释,如果多线程并发执行时会产生不同的结果,则该线程就是不安全的。
    线程安全产生的原因:大多是因为对全局变量和静态变量的操作

常见的线程不安全的函数
(1)不保护共享变量的函数
(2)函数状态随着被调用,状态发生变化的函数
(3)返回指向静态变量指针的函数
(4)调用线程不安全函数的函数
常见的线程安全的情况
(1)每个线程对全局变量或者静态变量只有读取的权限,而没有写入的权限,一般来说这些线程是安全的;
(2)类或者接口对于线程来说都是原子操作;
(3)多个线程之间的切换不会导致该接口的执行结果存在二义性;