美文网首页
线程共享安全问题

线程共享安全问题

作者: 举颗凤梨 | 来源:发表于2019-08-16 19:23 被阅读0次

数据的存储跟线程无关;一个进程中的数据在多个线程中可以直接用

list1 = [1, 2, 3]


def func1():
    list1.append(100)
    global list2
    list2 = [4,5,6]


def func2():
    list1[0] = 'hello'
    print(list2)   # [4, 5, 6]


t1 = Thread(target=func1())
t2 = Thread(target=func2())

t1.start()
t2.start()
print(list1)   # ['hello', 2, 3, 100]

当多线程同时处理一个数据时,数据可能会产生问题;
所以引入Lock

步骤:
获取锁对象
获取数据
数操作完成后
释放锁对象

注意:使用锁的时候保证一个数据对应一把锁
"""




class Account:
    def __init__(self, name, tel, balance, bank='招商银行'):
        self.bank = bank
        self.card_number = '392222222293093'
        self.name = name
        self.tel = tel
        self.balance = balance
        # 1.创建锁
        self.lock = Lock()

    def save_money(self, amount):
        print('========开始存钱========')
        # 2.使用锁
        self.lock.acquire()
        # 获取余额
        bl = self.balance
        print('余额:', bl)
        sleep(3)
        self.balance = bl + amount
        # 3.释放锁
        self.lock.release()
        print('存钱余额:',self.balance)
        print('========存钱结束========')

    def draw_money(self,amount):
        print('=======开始取钱!=========')
        self.lock.acquire()
        bl = self.balance
        print('余额:',bl)
        if bl < amount:
            print('余额不足')
            print('======取钱结束=======')
            return
        sleep(4)
        self.balance = bl - amount
        self.lock.release()
        print('取钱余额:',self.balance)
        print('======取钱结束======')

account = Account('hjr','232442',10000)

t1 = Thread(target=account.save_money,args=(2000,))
t2 = Thread(target=account.draw_money,args=(5000,))

t1.start()
t2.start()
t1.join()
t2.join()
print(account.balance)

相关文章

  • 4多线程-代码安全,同步代码块

    多次启动一个线程是非法的 线程安全问题的现象 线程安全问题产生的原因: 多个线程在操作共享的数据包。 操作共享数据...

  • ThreadLocal解析

    原理 产生线程安全问题的根源在于多线程之间的数据共享。如果没有数据共享,就没有多线程并发安全问题。ThreadLo...

  • ThreadLocal解析

    原理 产生线程安全问题的根源在于多线程之间的数据共享。如果没有数据共享,就没有多线程并发安全问题。ThreadLo...

  • 五 异常与多线程——第三节 线程同步机制

    1、线程安全问题的概述 多线程访问了共享的数据,就会产生线程安全问题 2、线程安全问题的代码实现 输出:会出现重复...

  • 18_线程安全_同步机制_锁

    多线程访问共享数据 造成安全问题 造成安全问题的原因 ==================锁 解决线程安全的方式 ...

  • 线程安全问题产生的原因

    线程安全问题产生的原因:1,多个线程在操作共享的数据。2,操作共享数据的线程代码有多条。 当一个线程在操作共享数据...

  • 2020-09-15 Java线程安全

    一、线程安全简介 单线程程序不会产生线程安全问题。多线程程序没有访问共享数据,也不会产生问题。多线程程序访问共享数...

  • 线程安全与可重入

    线程安全 线程安全问题是由于线程之间存在共享变量(共享资源、临界资源、临界区)引起的。由于CPU的调度,多个线程访...

  • iOS 多线程技术有些啥,如何解决多线程带来的隐患

    有多线程就有因为多线程造成的数据安全问题(如何确保同一块共享内存在多线程下不发生数据错乱和数据安全问题) 线程同步...

  • 并发编程专题-04共享模型-无锁(乐观锁)

    1. 无锁和有锁解决线程安全问题 1.1 非线程安全实现 在多线程的环境下,对共享资源的访问存在线程安全问题 1....

网友评论

      本文标题:线程共享安全问题

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