写这篇文章之前,我想起了一句实践出真知的诗,感觉就在嘴边但就是记不起来,最后百度之。
。 。 。 。 。 。
纸上得来终觉钱,绝知此事要躬行。
。 。 。 。 。 。
唯有实践出真知,学以致用才是学习的终点。
注意点一:
主进程(也叫主线程)也是可以请求和释放线程锁的。
注意点二:
线程锁必须是全局的,这样方能实现在主线程(就是进程)和子线程之间切换。
注意点三:
线程锁只在有请求锁的线程中生效,对第三方未请求锁的线程不起作用。
使用场景:
1,多个线程操作同一个共享变量的时候,避免共享变量出错,(两个线程同时修改变量,导致出错)。
2,让主线程阻塞,即下一步操作需要线程结果的时候,等待线程操作执行结果,其实是上边的特殊情况。
下面是例子,很好的解释了上面提到的三点注意项和场景类。
# coding:utf-8
import threading
import time
balance = 0
class ThreadTestO(threading.Thread):
def __init__(self, lock):
threading.Thread.__init__(self)
self.lock = lock
def run(self):
global balance
while True:
print "other thread"
time.sleep(1)
class ThreadTest(threading.Thread):
def __init__(self, lock):
threading.Thread.__init__(self)
self.lock = lock
def run(self):
global balance
while True:
self.lock.acquire()
print "thread"
print balance
time.sleep(10)
balance += 1
self.lock.release()
if __name__ == "__main__":
lock = threading.RLock()
thread = ThreadTest(lock)
thread.setDaemon(True)
thread.start()
threado = ThreadTestO(lock)
threado.setDaemon(True)
threado.start()
while True:
lock.acquire()
print "main thread"
print balance
balance += 1
time.sleep(1)
lock.release()