线程锁及线程锁的做用

 什么是线程锁机制

  多线程能够同时运行多个任务可是当多个线程同时访问共享数据时,可能致使数据不一样步,甚至错误!html

  so,不使用线程锁, 可能致使错误python

在分布式集群系统的开发中,线程锁每每并不能支持所有场景的使用,必须引入新的技术方案分布式锁。多线程

  线程锁:你们都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其他线程必需要等待当前线程执行完以后才能执行该代码段。可是,其他线程是能够访问该对象中的非加锁代码块的。分布式

  进程锁:也是为了控制同一操做系统中多个进程访问一个共享资源,只是由于程序的独立性,各个进程是没法控制其余进程对资源的访问的,可是可使用本地系统的信号量控制(操做系统基本知识)。post

  分布式锁:当多个进程不在同一个系统之中时,使用分布式锁控制多个进程对资源的访问。ui

分布式锁究竟是什么,怎么实现?spa

  intsmaze说简单点,实现分布式锁必需要依靠第三方存储介质来存储锁的元数据等信息。好比分布式集群要操做某一行数据时,这个数据的流水号是惟一的,那么咱们就把这个流水号做为一把锁的id,当某进程要操做该数据时,先去第三方存储介质中看该锁id是否存在,若是不存在,则将该锁id写入,而后执对该数据的操做;当其余进程要访问这个数据时,会先到第三方存储介质中查看有没有这个数据的锁id,有的话就认为这行数据目前已经有其余进程在使用了,就会不断地轮询第三方存储介质看其余进程是否释放掉该锁;当进程操做完该数据后,该进程就到第三方存储介质中把该锁id删除掉,这样其余轮询的进程就能获得对该锁的控制。操作系统

  说了这么多,再补充一点,线程锁,进程锁,分布式锁的做用都是同样的,只是做用的范围大小不一样。范围大小:分布式锁 > 进程锁 > 线程锁。能用线程锁,进程锁状况下使用分布式锁也是能够的,能用线程锁的状况下使用进程锁也是能够的。只是范围越大技术复杂度就越大。线程

用法

#建立锁 lock = threading.Lock() #锁定 lock.acquire([timeout]) #释放 lock.release()

优缺点

优势:保证资源同步 
缺点:有等待确定会慢code

相关文章
相关标签/搜索