PYTHON线程知识再研习C---线程互斥锁

时间:2023-03-09 15:59:13
PYTHON线程知识再研习C---线程互斥锁

结合例子,就很好理解了。

就是不要让共享变量被各个线程无序执行,导致结果不可预期

threading模块中定义了Lock类,可以方便的处理锁定:

#创建锁mutex = threading.Lock()#锁定mutex.acquire([timeout])#释放mutex.release()

其中,锁定方法acquire可以有一个超时时间的可选参数timeout。如果设定了timeout,则在超时后通过返回值可以判断是否得到了锁,从而可以进行一些其他的处理。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import threading
import time

class MyThread(threading.Thread):
    def run(self):
        global num
        time.sleep(1)

        if mutex.acquire(1):
            num += 1
            msg = self.name + ' set num to ' + str(num)
            print msg
            mutex.release()

num = 0
mutex = threading.Lock()
def test():
    for i in range(5):
        t = MyThread()
        t.start()
    t.join()
    print 'ALL DONE'

if __name__ == '__main__':
    test()

PYTHON线程知识再研习C---线程互斥锁