美文网首页
线程锁demo

线程锁demo

作者: 米酒真香 | 来源:发表于2021-02-12 17:21 被阅读0次

Python之路,Day9, 进程、线程、协程篇

import threading
import time

from functools import wraps

from loguru import logger


def timer(func):
    @wraps(func)  # 修正 docstring
    def wrap(*args, **kwargs):
        st = time.time()
        result = func(*args, **kwargs)
        et = time.time()
        duration = et - st
        logger.warning(f'耗时{duration}秒')
        return result

    return wrap


num = 0
thread_list = []
lock = threading.Lock()


class 线程锁demo:

    def holdon(self):
        time.sleep(0.01)
        return 1

    def add(self):
        global num
        print(f'--get num: {num}')
        time.sleep(1)
        lock.acquire()  # 加锁
        num += self.holdon()
        lock.release()  # 释放锁

    @timer
    def run(self):
        for i in range(100):
            t = threading.Thread(target=self.add)
            t.start()
            thread_list.append(t)

        for t in thread_list:
            t.join()

        print('===============')
        print(f'final num: {num}')


if __name__ == "__main__":
    app = 线程锁demo()
    app.run()

运行结果:

--get num: 0
--get num: 0
...
...
--get num: 0
--get num: 0
--get num: 0
--get num: 0
===============
final num: 100
2021-02-12 17:18:57.702 | WARNING  | __main__:wrap:16 - 耗时2.015472888946533秒

如果注释掉37和39行
运行结果:

--get num: 0
...
...
--get num: 0
===============
final num: 2
2021-02-12 17:20:16.185 | WARNING  | __main__:wrap:16 - 耗时1.0232963562011719秒

相关文章

  • 线程锁demo

    Python之路,Day9, 进程、线程、协程篇[https://www.cnblogs.com/alex3714...

  • 线程锁概念

    synchronized 和 volatile 使用 线程抛出异常,锁会被释放 如下demo 如果不想释放那把线程...

  • iOS 锁的使用

    参考 demo 参考的文章:iOS开发中的11种锁以及性能对比多线程-线程安全 结论: 自旋锁性能 > 信号量 >...

  • Java锁详解 带demo 持续更新 2022-04-25

    Java锁详解 带demo 持续更新 1.定义 公平锁&非公平锁 (线程对锁的争夺是否按请求资源的时间顺序排序) ...

  • 2019-07-23

    线程同步 互斥量mutex,读写锁rwlock,条件变量cond demo:https://www.jianshu...

  • 并发编程工具(四)Semaphore 信号量

    允许固定数量线程执行的锁 小漏斗简而言之 ,就是能够控制固定数量线程同时执行的工具 demo and 方法说明 重...

  • iOS 线程锁,多线程加锁,附DEMO!

    ios 线程锁 为什么要有线程锁,一般情况下我们是不允许多个线程同时读写操作的,为了保证线程安全,我们必须让一个线...

  • Java读写锁注意

    今天排查问题,发现读锁和写锁都被阻塞,而阻塞线程只持有读锁! 写demo模拟后出现了相同的问题: 打断点后,进入r...

  • 4.0.6.守护线程,线程死锁

    守护线程会随着主线程的结束而结束DaemonThread 线程 1, 线程 2,锁1,锁2 线程1 有锁1,想拿锁...

  • 悲观锁:一个线程得到锁,其它线程挂起,synchronized 乐观锁:一个线程得到锁,其它线程不断重试, cas...

网友评论

      本文标题:线程锁demo

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