线程3


'''
线程全局变量的共享问题?
  所有的线程是共享全局变量的

  就会造成数据的不安全
  但是因为有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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值