rope = mutex ropeLoad = semaphore(5) limit = 100 queue rope.wait() while (limit > 0 || !queue.empty()) ropeload.wait() limit-- ropeload.signal() if (100-limit >= 5) ropeload.signal(5) else ropeload.signal(100-limit) rope.signal()