join和lock的区别:
lock使用方法:
lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,使用lock的方法是, 在每个线程执行运算修改共享内存之前,执行lock.acquire()
将共享内存上锁, 确保当前线程执行时,内存不会被其他线程访问,执行运算完毕后,使用lock.release()
将锁打开, 保证其他的线程可以使用该共享内存。
join()使用方法:
def thread_job(): print(‘T1 start\n‘) for i in range(10): time.sleep(0.1) print(‘T1 finish\n‘) add_thread=threading.Thread(target=thread_job,name=‘T1‘) add_thread.start() add_thread.join() #用来控制,当T1这个任务执行完之后,才能进行其他的任务。 print(‘all done\n‘)
join和lock区别:
import threading def job1(): global A, lock lock.acquire() #开始锁住一个进程 for i in range(10): A += 1 print(‘job1‘, A) lock.release() #解锁一个进程 def job2(): global A, lock lock.acquire() for i in range(10): A += 10 print(‘job2‘, A) lock.release() if __name__ == ‘__main__‘: lock = threading.Lock() A = 0 t1 = threading.Thread(target=job1) t2 = threading.Thread(target=job2) t1.start() t2.start() t1.join() t2.join()
#如果不加入lock,输出的可能是
job1
job2 11
job2 21
job2 31
job2 41
job2 51
job2 61
job2 71
job2 81
job2 91
job2 101
job1 102
job1 103
job1 104
job1 105
job1 106
job1 107
job1 108
job1 109
job1 110
加上lock之后,会在执行完join1之后,才会执行join2
job1 1
job1 2
job1 3
job1 4
job1 5
job1 6
job1 7
job1 8
job1 9
job1 10
job2 20
job2 30
job2 40
job2 50
job2 60
job2 70
job2 80
job2 90
job2 100
job2 110
莫烦多线程教程:https://mofanpy.com/tutorials/python-basic/threading/lock/
原文:https://www.cnblogs.com/t-zing/p/15187161.html