Pythonè¿é¶(äºåå
)-å¤çº¿ç¨å®ç°åæ¥çåç§æ¹å¼
临çèµæºå³é£äºä¸æ¬¡åªè½è¢«ä¸ä¸ªçº¿ç¨è®¿é®çèµæºï¼å
¸åä¾åå°±æ¯æå°æºï¼å®ä¸æ¬¡åªè½è¢«ä¸ä¸ªç¨åºç¨æ¥æ§è¡æå°åè½ï¼å 为ä¸è½å¤ä¸ªçº¿ç¨åæ¶æä½ï¼è访é®è¿é¨åèµæºç代ç é常称ä¹ä¸ºä¸´çåºã
éæºå¶
threadingçLockç±»ï¼ç¨è¯¥ç±»çacquireå½æ°è¿è¡å éï¼ç¨realeaseå½æ°è¿è¡è§£é
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.lock = threading.Lock() def add(self):
self.lock.acquire()#å éï¼éä½ç¸åºçèµæº
self.num += 1
num = self.num
self.lock.release()#解éï¼ç¦»å¼è¯¥èµæº
return num
n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()#å°numå 1ï¼å¹¶è¾åºåæ¥çæ°æ®å+1ä¹åçæ°æ®
print(self.item,value)for item in range(5):
t = jdThread(item)
t.start()
t.join()#使线ç¨ä¸ä¸ªä¸ä¸ªæ§è¡12345678910111213141516171819202122232425262728
å½ä¸ä¸ªçº¿ç¨è°ç¨éçacquire()æ¹æ³è·å¾éæ¶ï¼éå°±è¿å
¥âlockedâç¶æãæ¯æ¬¡åªæä¸ä¸ªçº¿ç¨å¯ä»¥è·å¾éãå¦ææ¤æ¶å¦ä¸ä¸ªçº¿ç¨è¯å¾è·å¾è¿ä¸ªéï¼è¯¥çº¿ç¨å°±ä¼å为âblockedâç¶æï¼ç§°ä¸ºâåæ¥é»å¡âï¼åè§å¤çº¿ç¨çåºæ¬æ¦å¿µï¼ã
ç´å°æ¥æéç线ç¨è°ç¨éçrelease()æ¹æ³éæ¾éä¹åï¼éè¿å
¥âunlockedâç¶æã线ç¨è°åº¦ç¨åºä»å¤äºåæ¥é»å¡ç¶æç线ç¨ä¸éæ©ä¸ä¸ªæ¥è·å¾éï¼å¹¶ä½¿å¾è¯¥çº¿ç¨è¿å
¥è¿è¡ï¼runningï¼ç¶æã
ä¿¡å·é
ä¿¡å·éä¹æä¾acquireæ¹æ³åreleaseæ¹æ³ï¼æ¯å½è°ç¨acquireæ¹æ³çæ¶åï¼å¦æå
é¨è®¡æ°å¨å¤§äº0ï¼åå°å
¶å1ï¼å¦æå
é¨è®¡æ°å¨çäº0ï¼åä¼é»å¡è¯¥çº¿ç¨ï¼ç¥éæ线ç¨è°ç¨äºreleaseæ¹æ³å°å
é¨è®¡æ°å¨æ´æ°å°å¤§äº1ä½ç½®ã
import threadingimport timeclass Num:
def __init__(self):
self.num = 0
self.sem = threading.Semaphore(value = 3) #å
许æå¤ä¸ä¸ªçº¿ç¨åæ¶è®¿é®èµæº
def add(self):
self.sem.acquire()#å
é¨è®¡æ°å¨å1
self.num += 1
num = self.num
self.sem.release()#å
é¨è®¡æ°å¨å 1
return num
n = Num()class jdThread(threading.Thread):
def __init__(self,item):
threading.Thread.__init__(self)
self.item = item def run(self):
time.sleep(2)
value = n.add()
print(self.item,value)for item in range(100):
温馨提示:答案为网友推荐,仅供参考