Linux C互斥锁和条件变量(POSIX标准)

  • Post author:
  • Post category:linux


与进程类似,线程也存在同步的问题,当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图,如果每个线程使用的变量都是其他线程不会读取或修改的(比如线程私有数据),就不会存在一致性问题。通常来说用户可以使用互斥量(互斥锁)或者的条件变量(条件锁)的方式来解决线程的同步问题。

互斥锁

互斥锁是一个简单的锁定命令,它可以用来锁定共享资源使得其他线程无法访问。互斥锁具有以下特点:

·原子性:把一个互斥锁定义为一个原子操作,这意味着操作系统保证了如果一个线程锁定了互斥锁,则没有其他线程可以在同一时间成功锁定这个互斥量。

·唯一性:如果一个线程锁定一个互斥量,在它接触锁定之前,没有其他线程可以锁定这个互斥量。

·非繁忙等待:如果一个线程已经锁定了一个互斥锁,第二个线程又试图去锁定这个互斥锁,则第二个线程将被挂起(不占用CPU资源),直到第一个线程解锁,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。

锁类型

互斥锁类型
锁类型 初始化方式
普通锁 PTHREAD_MUTEX_INITIALIZER
嵌套锁 PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
纠错锁 PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
自适应锁



版权声明:本文为qq_37653144原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。