'''
线程全局变量的共享问题?
所有的线程是共享全局变量的
就会造成数据的不安全
但是因为有GIL所有小的数据,运算还是安全的
但是运算量大的话,GIL会自动释放,就会造成数据的不安全。
'''
import threading
from time import sleep
# 全局变量number
number = 0
def task1():
global number
for i in range(30):
number += 1
print('{}的number值是:{}'.format(threading.current_thread().name, number))
def task2():
global number
for i in range(30):
number += 1
print('{}的number值是:{}'.format(threading.current_thread().name, number))
if __name__ == '__main__':
t1 = threading.Thread(target=task1, name='任务1')
t2 = threading.Thread(target=task2, name='任务2')
t1.start()
t2.start()
t1.join()
t2.join()
print('主线程的number值是:{}'.format(number))
import time
from threading import Thread, current_thread, Lock
# 共享车票
ticket = 10
def sale_ticket(lock):
global ticket
while True:
lock.acquire(2) #
if ticket > 0:
print('{}正在卖第{}张票'.format(current_thread().name, ticket))
ticket -= 1
lock.release()
time.sleep(0.5)
else:
print('票卖光啦!')
lock.release()
break
if __name__ == '__main__':
lock = Lock()
t1 = Thread(target=sale_ticket, name='1号窗口', args=(lock,))
t2 = Thread(target=sale_ticket, name='2号窗口', args=(lock,))
t3 = Thread(target=sale_ticket, name='3号窗口', args=(lock,))
t4 = Thread(target=sale_ticket, name='4号窗口', args=(lock,))
t4.start()
t1.start()
t2.start()
t3.start()