并发编程 线程互斥

Posted 加油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程 线程互斥相关的知识,希望对你有一定的参考价值。

线程互斥

该实例创建了3个线程t1、t2和t3同步执行,三个线程都访问全局变量data,并改变它的值。当第一个线程t1请求锁成功后,开始访问共享数据data,第二个线程t2和t3也开始请求锁,但是此时t1还没有释放锁,所以t2、t3处于等待状态,直到t1调用lock.release()释放锁,t3才能得到锁。这样就保证了这三个线程共享数据data的一致性和同步性。并且这三个线程是并发执行的,没有人为控制其获得锁的顺序,所以他们执行的顺序也是不定的。

注意:
调用acquire([timeout])时,线程将一直阻塞,直到获得锁或者直到timeout秒后返回是否获得锁。

import time
import threading

data=0
lock=threading.Lock() #创建一个锁对象

def func():
    global data
    print("%s acquire lock...\\n" %threading.currentThread().getName())
    if lock.acquire():
        print("%s get lock...\\n" %threading.currentThread().getName())
        data += 1 #must lock
        time.sleep(2) #其他操作
        print("%s release lock...\\n" %threading.currentThread().getName())

    #调用release()将释放锁
    lock.release()

startTime=time.time()
t1=threading.Thread(target=func)
t2=threading.Thread(target=func)
t3=threading.Thread(target=func)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()

endTime=time.time()
print("used time is",endTime-startTime)

以上是关于并发编程 线程互斥的主要内容,如果未能解决你的问题,请参考以下文章

Python并发编程—同步互斥

C++11多线程 原子操作概念及范例

多线程并发编程

python并发编程之多线程守护系列互斥锁生产者消费者模型

并发编程 线程互斥

大牛聊Java并发编程原理之 线程的互斥与协作机制