多线程过桥的问题

题目:有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。

import threading
import time
from collections import deque

class Person(threading.Thread):
def __init__(self, id, msg):
threading.Thread.__init__(self)
self.id = id
self.msg = msg
def run(self):
cross(self)
def cross(self):
print(str(self.id) + "\t" + self.msg)

class PersonPool(threading.Thread):
canCross = threading.RLock()
def __init__(self):
threading.Thread.__init__(self)
self.persons = deque([])
self.shutdown = False
def add(self, person):
self.persons.append(person)
def stop(self):
self.shutdown = True
def run(self):
self.waitForPerson()
def waitForPerson(self):
while self.shutdown == False:
PersonPool.canCross.acquire()
while len(self.persons) != 0:
person = self.persons.popleft()
person.cross()
time.sleep(1)
PersonPool.canCross.release()

if __name__ == "__main__":
nsPool = PersonPool()
snPool = PersonPool()

snPool.start()
nsPool.start()

for i in xrange(0, 10):
snPool.add(Person(i, "From North To South"))
for j in xrange(0, 12):
snPool.add(Person(j, "From South To North"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值