| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """
- 多个线程共享数据 - 有锁的情况
- Version: 0.1
- Author: 骆昊
- Date: 2018-03-20
- """
- import time
- import threading
- class Account(object):
- def __init__(self):
- self._balance = 0
- self._lock = threading.Lock()
- def deposit(self, money):
- # 获得锁后代码才能继续执行
- self._lock.acquire()
- try:
- new_balance = self._balance + money
- time.sleep(0.01)
- self._balance = new_balance
- finally:
- # 操作完成后一定要记着释放锁
- self._lock.release()
- @property
- def balance(self):
- return self._balance
- if __name__ == '__main__':
- account = Account()
- # 创建100个存款的线程向同一个账户中存钱
- for _ in range(100):
- threading.Thread(target=account.deposit, args=(1,)).start()
- # 等所有存款的线程都执行完毕
- time.sleep(2)
- print('账户余额为: ¥%d元' % account.balance)
- # 想一想结果为什么不是我们期望的100元
|