import random
import threading
NUM_VALUES = 10
MAX = 100
def main(data, mutex):
for i in range(NUM_VALUES):
threading.Thread(None, generate_value, None, (data,mutex)).start()
threading.Thread(None, print_values, None, (data,mutex)).start()
def generate_value(data, mutex):
mutex.acquire()
data.append(int(random.random()*MAX))
mutex.release()
def print_values(data, mutex):
mutex.acquire()
while len(data):
num = min(data)
data.remove(num)
print num
mutex.release()
threading.Thread(None, main, None, ([],threading.Lock())).start()
aW1wb3J0IHJhbmRvbQppbXBvcnQgdGhyZWFkaW5nCgpOVU1fVkFMVUVTID0gMTAKTUFYID0gMTAwCgpkZWYgbWFpbihkYXRhLCBtdXRleCk6CiAgICBmb3IgaSBpbiByYW5nZShOVU1fVkFMVUVTKToKICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKE5vbmUsIGdlbmVyYXRlX3ZhbHVlLCBOb25lLCAoZGF0YSxtdXRleCkpLnN0YXJ0KCkKICAgIHRocmVhZGluZy5UaHJlYWQoTm9uZSwgcHJpbnRfdmFsdWVzLCBOb25lLCAoZGF0YSxtdXRleCkpLnN0YXJ0KCkKCmRlZiBnZW5lcmF0ZV92YWx1ZShkYXRhLCBtdXRleCk6CiAgICBtdXRleC5hY3F1aXJlKCkKICAgIGRhdGEuYXBwZW5kKGludChyYW5kb20ucmFuZG9tKCkqTUFYKSkKICAgIG11dGV4LnJlbGVhc2UoKQoKZGVmIHByaW50X3ZhbHVlcyhkYXRhLCBtdXRleCk6CiAgICBtdXRleC5hY3F1aXJlKCkKICAgIHdoaWxlIGxlbihkYXRhKToKICAgICAgICBudW0gPSBtaW4oZGF0YSkKICAgICAgICBkYXRhLnJlbW92ZShudW0pCiAgICAgICAgcHJpbnQgbnVtCiAgICBtdXRleC5yZWxlYXNlKCkKCnRocmVhZGluZy5UaHJlYWQoTm9uZSwgbWFpbiwgTm9uZSwgKFtdLHRocmVhZGluZy5Mb2NrKCkpKS5zdGFydCgp