python之多线程同步实现

线程(Thread)是CPU分配资源和调度的最小单位。
一个程序至少有一个进程,而一个进程至少有一个线程。如果进程中有多个线程且多个线程共享进程的资源就会出现线程对共享资源的使用问题,如此需要线程间的同步。线程间的同步实现有多种机制,这里和大家分享两个实现方式: 锁机制信号量

1、锁机制_Lock类实现线程同步

其中acquire函数进行加锁,用realease函数进行解锁。

import threading
import time

def thread_a(lock_a,lock_b):
    while True:
        lock_a.acquire() 
        print('A')
        time.sleep(1)
        lock_b.release()  

def thread_b(lock_b,lock_c):
    while True:
        lock_b.acquire() 
        print('B')
        time.sleep(1)
        lock_c.release() 

def thread_c(lock_c,lock_d):
    while True:
        lock_c.acquire() 
        print('C')
        time.sleep(1)
 		lock_d.release()

def thread_d(lock_d,lock_a):
    while True:
        lock_d.acquire() 
        print('D')
        time.sleep(1)
        lock_a.release() 

if __name__ == "__main__":

    #创建锁对象
    lock_a = threading.Lock() 
    lock_b = threading.Lock()
    lock_c = threading.Lock()
    lock_d = threading.Lock()
        
    #申请锁
    lock_b.acquire()
    lock_c.acquire()
    lock_d.acquire()
    
    #创建线程
    t1 = threading.Thread(target=thread_a,args=(lock_a,lock_b))
    t2 = threading.Thread(target=thread_b,args=(lock_b,lock_c))
    t3 = threading.Thread(target=thread_c,args=(lock_c,lock_d))
    t4 = threading.Thread(target=thread_d,args=(lock_d,lock_a))
   
    #运行线程
    t1.start()
    t2.start()
    t3.start()
    t4.start()
     
    #等待线程终止
    t1.join()
    t2.join()
    t3.join()
    t4.join()
 

执行结果:按顺序依次输出 A B C D
python之多线程同步实现_第1张图片

2、信号量_Semaphore实现线程同步

import threading
import time

def thread_a(sema_a,sema_b):
    while True:
        sema_a.acquire()
        print('A')
        time.sleep(1)
        sema_b.release()

def thread_b(sema_b,sema_c):
    while True:
        sema_b.acquire()
        print('B')
        time.sleep(1)
        sema_c.release()

def thread_c(sema_c,sema_a):
    while True:
        sema_c.acquire()
        print('C')
        time.sleep(1)
        sema_a.release()

if __name__ == "__main__":

    sema_a = threading.Semaphore(1)
    sema_b = threading.Semaphore(0)
    sema_c = threading.Semaphore(0)

    t1 = threading.Thread(target=thread_a,args=(sema_a,sema_b))
    t2 = threading.Thread(target=thread_b,args=(sema_b,sema_c))
    t3 = threading.Thread(target=thread_c,args=(sema_c,sema_a))

    t1.start()
    t2.start()
    t3.start()

    t1.join()
    t2.join()
    t3.join()

执行结果:按顺序依次输出 A B C
python之多线程同步实现_第2张图片

你可能感兴趣的:(python,python,thread,多线程)