【2017-06-20】Linux应用开发工程师C/C++面试题目记录有:Linux多线程程序的一头问题

参照之一:Linux
线程同步的老三种方法

链接地址:http://www.cnblogs.com/eleclsc/p/5838790.html

简简单单回答:

Linux下线程同步最常用的老三栽办法就是互斥锁、条件变量和信号量。

互斥锁通过锁机制来实现线程间的同台,锁机制是同等时刻才同意一个线程执行一个要害部分的代码。

条件变量是因此来等而未是故来达成锁的,条用来机关阻塞一个线程,直到有异常情况发生了,通常条件变量和互斥锁同时以。

线程的信号量与经过中通信中利用的信号量的概念是一模一样,它是千篇一律种植奇特之变量,它好于长还是减,但对那个的主要看被担保是原子操作,如果一个次中发生差不多个线程试图改变一个信号量的价,系统将保证所有的操作都拿依次展开。

信号量最常用之就是二值信号量,及只能有0与1少于个价,有时候为被单值信号量。

而产生一个问题,线程同步时怎样选信号量或互斥锁?

此处百度到一个有关互斥锁和信号量的区分:

  1. 互斥锁用于线程的排外,信号量用于线程的一起;

当下是双边的有史以来区别,也尽管是排斥和同的区别

互斥:是凭借有同资源又就允许一个访问者对那进展访问,具有唯一性和排它性,但互斥无法界定访问者对资源的拜访顺序,即看是无序的。 

并:是据在排斥的根底及,这是大多数状,通过另外机制落实访问者对资源的稳步访问。

于大部情景下,同步已经实现了互斥,特别是装有写入资源的气象肯定是轧的,少数情况是指好允许多只访问者同时做客资源。

  1. 互斥量值只能为0/1,信号量值可以吗非负整数。  

也就是说,一个互斥量只能用来一个资源的排斥访问,它不可知兑现多只资源的多线程互斥问题。

信号量可以兑现多单同类资源的多线程互斥和齐。

当信号量为单值信号量时,也得成功一个资源的排斥访问。

3.
互斥量的加锁和解锁必须由同一线程C++分别对应使用,信号量可以由一个线程释放,另一个线程得到。