python-다선정 소연련2
제목:
1. Lock 버전 생산자와 소비자 모델:
# encoding=utf-8
import threading
import random
import time
#
gMoney = 1000
gLock = threading.Lock()
gTotalTimes = 0
gTimes = 0
# :
class Producer (threading.Thread):
# run
def run(self):
global gMoney
global gTimes
while True:
money = random.randint(100,1000)
gLock.acquire()
if gTimes >= gTotalTimes:
gLock.release()
break
gMoney += money
# threading.current_thread() :
print('%s %d , %d ' %(threading.current_thread(),
money,gMoney))
gTimes += 1
gLock.release()
time.sleep(0.5)
class Consumer (threading.Thread):
# run
def run(self):
global gMoney
while True:
money = random.randint(100,1000)
gLock.acquire()
if gMoney >= money:
gMoney -= money
print('%s %d , %d ' %(threading.current_thread(),
money,gMoney))
else:
if gTimes >= gTotalTimes:
gLock.release()
break
print('%s %d , %d , !' %(threading.current_thread(),
money,gMoney))
gLock.release()
time.sleep(0.5)
def main():
#
for x in range(3):
t = Consumer(name=" %d"%x)
t.start()
#
for x in range(5):
t = Producer(name=" %d"%x)
t.start()
if __name__ == '__main__':
main()
2. Condition 버전의 생산자와 소비자 모델:
# encoding=utf-8
import threading
import random
import time
#
gMoney = 1000
gCondition = threading.Condition()
gTotalTimes = 0
gTimes = 0
# :
class Producer (threading.Thread):
# run
def run(self):
global gMoney
global gTimes
while True:
money = random.randint(100,1000)
gCondition.acquire()
if gTimes >= gTotalTimes:
gCondition.release()
break
gMoney += money
# threading.current_thread() :
print('%s %d , %d ' %(threading.current_thread(),
money,gMoney))
gTimes += 1
gCondition.notify_all()
gCondition.release()
time.sleep(0.5)
class Consumer (threading.Thread):
# run
def run(self):
global gMoney
while True:
money = random.randint(100,1000)
gCondition.acquire()
while gMoney < money:
if gTimes >= gTotalTimes:
gCondition.release()
return
print('%s %d , %d , !' %(threading.current_thread(),
money,gMoney))
gCondition.wait()
gMoney -= money
print('%s %d , %d ' %(threading.current_thread(),
money,gMoney))
gCondition.release()
time.sleep(0.5)
def main():
#
for x in range(3):
t = Consumer(name=" %d"%x)
t.start()
#
for x in range(5):
t = Producer(name=" %d"%x)
t.start()
if __name__ == '__main__':
main()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.