| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import time
- from threading import Thread, Lock
- class Account(object):
- def __init__(self, balance=0):
- self._balance = balance
- self._lock = Lock()
- @property
- def balance(self):
- return self._balance
- def deposit(self, money):
- # 当多个线程同时访问一个资源的时候 就有可能因为竞争资源导致资源的状态错误
- # 被多个线程访问的资源我们通常称之为临界资源 对临界资源的访问需要加上保护
- if money > 0:
- self._lock.acquire()
- try:
- new_balance = self._balance + money
- time.sleep(0.01)
- self._balance = new_balance
- finally:
- self._lock.release()
- class AddMoneyThread(Thread):
- def __init__(self, account):
- super().__init__()
- self._account = account
- def run(self):
- self._account.deposit(1)
- def main():
- account = Account(1000)
- tlist = []
- for _ in range(100):
- t = AddMoneyThread(account)
- tlist.append(t)
- t.start()
- for t in tlist:
- t.join()
- print('账户余额: %d元' % account.balance)
- if __name__ == '__main__':
- main()
|