03. 多线程锁

作者: 花间派I风月 | 来源:发表于2020-05-04 21:34 被阅读0次

1. 互斥锁

  1. 线程之间是进行随机调度,多个线程同时修改同一条数据时可能会出现脏数据。
  2. 因此出现了线程锁,即同一时刻允许一个线程执行操作。线程锁用于锁定资源。
  3. 由于线程之间是进行随机调度,如果有多个线程同时操作一个对象,如果没有很好地保护该对象,会造成程序结果的不可预期,我们也称此为“线程不安全”。
#!/usr/bin/env python
# coding:utf-8

from threading import Thread, Lock
import time


def work():
    global num
    lock.acquire()
    tmp = num
    time.sleep(0.1)
    num = tmp - 1
    lock.release()
    print(f'num: {num}')


if __name__ == '__main__':
    lock = Lock()
    num = 100
    t_l = []
    for i in range(100):
        t = Thread(target=work)
        t_l.append(t)
        t.start()
    for p in t_l:
        p.join()

2. 递归锁

  1. RLcok类的用法和Lock类一模一样,但它支持嵌套,在多个锁没有释放的时候一般会使用RLcok类。
#!/usr/bin/env python
# coding:utf-8

import threading
import time


def work(lock):
    global global_num
    lock.acquire()
    global_num += 1
    time.sleep(1)
    print(f'global_num: {global_num}')
    lock.release()


if __name__ == '__main__':
    global_num = 0
    lock = threading.RLock()
    for i in range(10):
        t = threading.Thread(target=work, args=(lock,))
        t.start()

相关文章

  • 03. 多线程锁

    1. 互斥锁 线程之间是进行随机调度,多个线程同时修改同一条数据时可能会出现脏数据。 因此出现了线程锁,即同一时刻...

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • Day18 多线程

    01.多线程技术1 02.多线程技术2 03.多线程应用 04.join 函数 耗时操作 1.耗时操作放到主线程中...

  • 浅析乐观锁、悲观锁与CAS

    乐观锁与悲观锁 处理多线程并发访问最常用的就是加锁,锁又分成乐观锁和悲观锁。 悲观锁 在多线程访问共享资源时,同时...

  • 多线程与锁

    多线程与锁

  • 多线程 (三)iOS中的锁

    ios 多线程--锁

  • 多线程(四)

    上篇多线程(三)我们看了多线程的安全隐患 以及各种锁的简单使用,接下来我们来看看锁的比较、以及自旋锁、互斥锁比较 ...

  • 解决线程同步的方案汇总总结

    这是一篇继上一篇继续介绍多线程同步的博客.(你了解多线程自旋锁、互斥锁、递归锁等锁吗?[https://www.j...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • zookeeperDistributedLock

    分布式锁: 分布式锁是什么? 通常说的锁是单进程多线程的锁,在多线程并发编程中用于线程之间的数据共享 分布式锁 指...

网友评论

    本文标题:03. 多线程锁

    本文链接:https://www.haomeiwen.com/subject/drlughtx.html