互斥:是指散步在不同进程之间的若干程序片段,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
锁:是在解决资源竞争的时候的一种策略,是处理并发的一种同步手段。例如:当多个线程、进程或者客户端在访问同一个资源的时候,因为访问和更改该资源的先后顺序的问题,而导致获取的信息不一致。而锁的引入,可以保证该资源的被同一个使用者使用时,操作结果是一致的。
最常用的锁,有读写锁和互斥锁。
读写锁:主要用于多线程,解决多线程之间的读写问题,主要是为了解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。
读写锁特点:
1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
互斥锁:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。
互斥锁特点:xi
一次只能一个线程拥有互斥锁,其他线程只有等待。
用于分布式系统中,是控制分布式系统之间同步访问共享资源的一种方式。主要用于解决下面两个场景:
1.效率:避免不同节点重复相同的工作。如果一个动作只需要一个节点处理,那我们要避免这个动作被多个节点都进行操作。
2.正确性:如果一个数据会被不同的节点使用,而这个数据的操作受不同节点的操作影响,那么我们需要分布式锁来保证操作的正确性。
分布式锁需要具备的特性:
1.互斥性,这个与非分布式锁并无明显区别,需要保证单个节点之间的互斥性。
2.可重入性:同一个人节点的同一个线程获取到这个锁之后,
该线程还是可以继续获取该锁。
3.锁超时机制:因为分布式节点往往分布在不同的机器上,
那么就涉及到网络通讯的情况,而网络通讯又具备不稳定性,
所以我们需要超时机制来保证,锁不能一致被释放。
4.高效性:不能因为锁的缘故,导致分布式系统,卡在这一步。