1

이 코드는 장벽을 사용하여 Python3에서 구현했습니다. 나는 Python2.7에서 동일한 기능을하고 싶지만 내가 장벽이 Python2.7Python2.7에서의 배리어 구현

에 거기
import threading 
import time 
from threading import Thread,Barrier 

b = Barrier(2, timeout=50) 

def func1(): 
    time.sleep(3) 
    b.wait() 
    print('Working from func1') 
    return 

def func2(): 
    time.sleep(5) 
    b.wait() 
    print('Working from func2') 
    return 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 

답변

3

을 그대로 당신은 세마포와 장벽을 시뮬레이션 할 수 있습니다 사용할 원시 동기화 모른다. 를 살펴 보자 ... 문제는이 시간 초과 매개 변수, 어쩌면 사용 조건이 없다는 것입니다 Implementing an N process barrier using semaphores

import time 
from threading import Thread,Semaphore 

class Barrier: 
    def __init__(self, n): 
     self.n = n 
     self.count = 0 
     self.mutex = Semaphore(1) 
     self.barrier = Semaphore(0) 

    def wait(self): 
     self.mutex.acquire() 
     self.count = self.count + 1 
     self.mutex.release() 
     if self.count == self.n: self.barrier.release() 
     self.barrier.acquire() 
     self.barrier.release() 

b = Barrier(2) 

def func1(): 
    time.sleep(3) 
    # 
    b.wait() 
    # 
    print('Working from func1') 
    return 

def func2(): 
    time.sleep(5) 
    # 
    b.wait() 
    # 
    print('Working from func2') 
    return  

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start()