您的位置:首页 > 编程语言 > Python开发

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

2014-06-22 21:48 190 查看
# *-* 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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息