Skip to content

Instantly share code, notes, and snippets.

@njujerry
Created May 9, 2017 03:34
Show Gist options
  • Save njujerry/f243d4c2f926f64e437f9823bce6ce24 to your computer and use it in GitHub Desktop.
Save njujerry/f243d4c2f926f64e437f9823bce6ce24 to your computer and use it in GitHub Desktop.
线程间通信及同步机制

线程间通信及同步机制

通信机制

  • 全局变量: 多用于主线程对子线程的控制上。由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。

  • 事件对象

  • 消息

同步机制

保证各线程可以一起适当协调的工作称为线程同步。

  • 锁(lock):包括互斥锁、条件变量、读写锁
    • 互斥锁(mutex lock)提供了以排他方式防止数据结构被并发修改的方法。
    • 读写锁(read-write lock)允许多个线程同时读共享数据,而对写操作是互斥的。
    • 条件变量(condition variable)可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
  • 信号量(Semaphore):包括无名线程信号量和命名线程信号量。
  • 信号(Signal):类似进程间的信号处理线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment