python学习笔记三---segmaphore信号量学习

# *-* coding=gb2312 *-*
'''
信号量semaphore
是一个变量,控制着对公共资源或者临界区的访问。信号量维护着一个计数器,指定可同时访问资源或者进入临界区的线程数。
每次有一个线程获得信号量时,计数器-1。若计数器为0,其他线程就停止访问信号量,直到另一个线程释放信号量。
'''
import threading
import random
import time

class MyThread(threading.Thread):
	availableTables=['A','B','C','D','E']
	
	def __init__(self,threadName,semaphore):
		self.interval =random.randrange(1,6)
		self.semaphore =semaphore
		threading.Thread.__init__(self,name=threadName)
	
	def run(self):
		self.semaphore.acquire()
		#acquire a semaphore
		table = MyThread.availableTables.pop()
		print "%s entered;seated at table %s." %(self.getName(),table)
		time.sleep(self.interval)
		
		#free a table
		print "%s exiting,freeing table %s." %(self.getName(),table)
		MyThread.availableTables.append(table)
		
		self.semaphore.release()

mySemaphore = threading.Semaphore(len(MyThread.availableTables))

def Test():		
	threads=[]
	
	for i in range(1,10):
		threads.append(MyThread("thread"+str(i),mySemaphore))
	
	for i in range(len(threads)):
		threads[i].start()

if __name__ == '__main__':
	Test()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值