#!/usr/bin/python # $Id: prodcons.python.html,v 1.5 2004/07/03 07:11:34 bfulgham Exp $ # http://www.bagley.org/~doug/shootout/ import sys from threading import * access = Condition() count = 0 consumed = 0 produced = 0 data = 0 def consumer(n): global count, data, consumed while 1: access.acquire() while count == 0: access.wait() i = data count = 0 access.notify() access.release() consumed += 1 if i == n: break def producer(n): global count, data, produced for i in xrange(1,n+1): access.acquire() while count == 1: access.wait() data = i count = 1 access.notify() access.release() produced += 1 def main(n): t1 = Thread(target=producer, args=(n,)) t2 = Thread(target=consumer, args=(n,)) t1.start() t2.start() t1.join() t2.join() print produced, consumed main(int(sys.argv[1]))