# 延迟模块
import time
# 线程模块
import threading
# 系统模块
import os
my_list = []
# a函数
def a(num):
for i in range(num):
time.sleep(0.2)
my_list.append(i)
print(f'我是a函数{os.getpid()}')
# b函数
def b(num):
for i in range(num):
time.sleep(0.2)
print(f'我是b函数{os.getpid()}my_list{my_list}')
print(f'获取线程信息{threading.current_thread()}')
# 入口函数
if __name__ == "__main__":
#创建多线程
a_ding = threading.Thread(target=a, args=(6,))
# b_ding = threading.Thread(target=b, kwargs={'num': 9})
b_ding = threading.Thread(target=b, kwargs={'num': 9}, daemon=True) # daemon=True 参数的方式设置守护进程
# 设置主线程守护
a_ding.setDaemon(True)
#启动线程
a_ding.start()
b_ding.start()
#延时.5秒
time.sleep(0.5)
print('主线程结束')
# 主线程结束,等所有子线程完成任务 在结束
# 设置主线程守护 ,就是主线程结束,子线程 也结束
# 线程执行顺序是 无序的,是由cpu调度决定某个线程先执行的
# 线程之间是共享全局变量的
# 线程之间的资源竞争有问题 ,数据会不对 ,需要使用互斥锁解决
#使用互斥锁需要 在适当的地方 上锁解锁 以免造成死锁
# 使用互斥锁案例
import threading
import time
my_list = 0
def a():
mutex.acquire() #上锁
for i in range(1000000):
global my_list
my_list += 1
mutex.release() #解锁
print(my_list)
def b():
mutex.acquire() #上锁
for i in range(1000000):
global my_list
my_list += 1
mutex.release() #解锁
print(my_list)
#入口文件
if __name__ == '__main__':
# 创建互斥锁
mutex = threading.Lock()
# 创建多线程
a_ding = threading.Thread(target=a)
b_ding = threading.Thread(target=b)
#启动线程
a_ding.start()
b_ding.start()
发表评论