add python threading examples and intros for lec 18 spoc discuss
This commit is contained in:
46
related_info/lab7/semaphore_condition/thr-ex7.py
Normal file
46
related_info/lab7/semaphore_condition/thr-ex7.py
Normal file
@@ -0,0 +1,46 @@
|
||||
#coding=utf-8
|
||||
import threading
|
||||
import random
|
||||
import time
|
||||
|
||||
class SemaphoreThread(threading.Thread):
|
||||
"""classusing semaphore"""
|
||||
|
||||
availableTables=['A','B','C','D','E']
|
||||
|
||||
def __init__(self,threadName,semaphore):
|
||||
"""initialize thread"""
|
||||
|
||||
threading.Thread.__init__(self,name=threadName)
|
||||
self.sleepTime=random.randrange(1,6)
|
||||
#set the semaphore as a data attribute of the class
|
||||
self.threadSemaphore=semaphore
|
||||
def run(self):
|
||||
"""Print message and release semaphore"""
|
||||
|
||||
#acquire the semaphore
|
||||
self.threadSemaphore.acquire()
|
||||
#remove a table from the list
|
||||
table=SemaphoreThread.availableTables.pop()
|
||||
print "%s entered;seated at table %s." %(self.getName(),table),
|
||||
print SemaphoreThread.availableTables
|
||||
time.sleep(self.sleepTime)
|
||||
#free a table
|
||||
print " %s exiting;freeing table %s." %(self.getName(),table),
|
||||
SemaphoreThread.availableTables.append(table)
|
||||
print SemaphoreThread.availableTables
|
||||
#release the semaphore after execution finishes
|
||||
self.threadSemaphore.release()
|
||||
|
||||
threads=[] #list of threads
|
||||
#semaphore allows five threads to enter critical section
|
||||
threadSemaphore=threading.Semaphore(len(SemaphoreThread.availableTables))
|
||||
#创建一个threading.Semaphore对象,他最多允许5个线程访问临界区。
|
||||
#Semaphore类的一个对象用计数器跟踪获取和释放信号机的线程数量。
|
||||
#create ten threads
|
||||
for i in range(1,11):
|
||||
threads.append(SemaphoreThread("thread"+str(i),threadSemaphore))
|
||||
#创建一个列表,该列表由SemaphoreThread对象构成,start方法开始列表中的每个线程
|
||||
#start each thread
|
||||
for thread in threads:
|
||||
thread.start()
|
||||
Reference in New Issue
Block a user