Linux线程同步——互斥锁和读写锁

在linux多线程编程中,往往会遇到多线程共享同个资源,为了保证数据的一致性或者有序访问,需要进行线程同步操作。

1、同步和互斥概念

所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。

所谓同步,是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。“同”字应是指协同、协助、互相配合主旨在协同步调,按预定的先后次序运行。

因此,同步是一种更为复杂的互斥,而互斥是一种特殊的同步

也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)! 

2、互斥锁和读写锁的区别

读写锁特点:

  • 多个读者可以同时进行读(读共享,写互斥)
  • 写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
  • 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

互斥锁特点:

  • 一次只能一个线程拥有互斥锁,其他线程只有等待

3、什么时候用互斥锁什么时候用读写锁 

互斥锁:

  • 写操作比较多或是本身需要同步的地方并不多的程序中我们应该使用读写锁
  • 线程之间需要指定特定的运行顺序

读写锁:

  • 在线程之间共享同一资源无特定的运行顺序的情况下,同步地方比较多读操作远大于写操作且

参考:https://blog.csdn.net/chen134225/article/details/81835055 

你可能感兴趣的:(Linux)