标签:进程间 就会 start 在线 情况 lob print 创建 错误
import threading
num = 0
def write1():
global num
i = 1
while i <= 1000000:
num += 1
i += 1
print("result1:%d" % num)
def write2():
global num
i = 1
while i <= 1000000:
# 由于 num 是全局变量,但num += 1 是分三步执行的
# 若没有加锁,就会出现抢夺资源( num +=1 还没执行完,另一个线程拿这个变量去使用),就会导致 num 的最终值出现错误
num += 1
i += 1
print("result2:%d" % num)
def main():
# 创建两个线程
p1 = threading.Thread(target=write1)
p2 = threading.Thread(target=write2)
# 开启线程
p1.start()
p2.start()
if __name__ == "__main__":
main()
result1:1180321
result2:1567595
以上 result2 结果不是一个定值,各种值情况都会出现
# 两个进程实现从队列中写一个,收一个数据
import threading
num = 0
def write1(lock):
global num
i = 1
while i <= 1000000:
lock.acquire()
num += 1
lock.release()
i += 1
print("result1:%d" % num)
def write2(lock):
global num
i = 1
while i <= 1000000:
# 由于 num 是全局变量,但num += 1 是分三步执行的
# 若没有加锁,就会出现抢夺资源( num +=1 还没执行完,另一个线程拿这个变量去使用),就会导致 num 的最终值出现错误
lock.acquire()
num += 1
lock.release()
i += 1
print("result2:%d" % num)
def main():
# 创建一个锁
lock = threading.Lock()
# 创建两个线程
p1 = threading.Thread(target=write1, args=(lock,))
p2 = threading.Thread(target=write2, args=(lock,))
# 开启线程
p1.start()
p2.start()
if __name__ == "__main__":
main()
result1:1996142
result2:2000000
① 线程之间是共用全局变量的,因为线程是一个进程里分出来的几个任务,使用的是用同一份代码,同样的变量与资源。
② 互斥锁一般用在线程需要 共享全局变量 的时候
③ 进程与线程之间的关系与区别:
? ① 进程 包含 多个线程
? ② 进程间 不共用 变量与资源;线程间 共用 变量与资源
标签:进程间 就会 start 在线 情况 lob print 创建 错误
原文地址:https://www.cnblogs.com/fry-hell/p/12825897.html