|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 万中山 于 2019-6-16 23:26 编辑
- import threading
- x = 100
- lock = threading.Lock()
- def run(num,conter):
- global x
- #lock.acquire() # [color=Red]当把锁放外面的时候就正常[/color]
- for i in range(conter):
- lock.acquire() # 进程获得锁
- x = x+num
- x = x-num
- lock.release() # 线程释放锁
- if x != 100:
- print(x)
- break
- #lock.release()
- if __name__ == '__main__':
- t1 = threading.Thread(target=run,args=(100,50000))
- t2 = threading.Thread(target=run,args=(100,50000))
- t1.start()
- t2.start()
- t1.join()
- t2.join()
- print('{}线程结束...'.format(threading.current_thread().getName()))
复制代码
今天在学习多线程的时候,看到锁这章,代码如上,当我把获取锁和释放锁放在循环内部的时候,if语句还是会执行,
也就是说,当多个线程在同时访问全局变量x的时候,加了锁,还是会出现数据安全问题。
然后我想了想,就把获取锁和释放锁放到循环外边,结果就不会执行if语句里面的内容了。
想问下是为什么? |
|