import threading import time g_nums = [11, 22] g_num = 0 # 创建一个互斥锁,默认是没有上锁的 mutex = threading.Lock() def test1(): for i in range(5): print("test1------%d------" % i) time.sleep(1) def test2(): for i in range(5): print("test2------%d------" % i) time.sleep(1) def test3(temp): temp.append(33) print(temp) def test4(): global g_num # 上锁,如果之前没有被上锁,那么此时 上锁成功 # 如果上锁之前 已经被上锁了,那么此时会堵塞在这里,直到 这个锁被解开为止 mutex.acquire() for i in range(1000000): g_num += 1 # 解锁 mutex.release() print(g_num) def test5(): global g_num mutex.acquire() for i in range(1000000): g_num += 1 mutex.release() print(g_num) def main(): t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) # args指定将来调用 函数的时候 传递什么数据过去 t3 = threading.Thread(target=test3, args=(g_nums,)) t4 = threading.Thread(target=test4) t5 = threading.Thread(target=test5) t1.start() t2.start() t3.start() t4.start() t5.start() # 可以打印当前程序有多少个线程(下面调用返回一个列表) print(threading.enumerate()) time.sleep(5) print(g_num) if __name__ == '__main__': main()