2° Trabalho
Erik Tronkos
Pedro Boueke
UFRJ - 2016.05.19
s
void acquire(struct Lock *spinlock)
while(__sync_lock_test_and_set(&spinlock->held, 1));
void release (struct Lock *spinlock)
spinlock->held = 0;
lock(mutex);
product = (rand() % (10000000))+1
is_not_full.wait
products.push(product);
++produced;
is_not_empty.notifyAll();
while(consumed < max_production)
{
consume(id);
}
lock(mutex);
is_not_empty.wait
product = products.top();
products.pop();
++consumed;
is_not_full.notify_all();