Design a resource pool, the following three operations meet O (1) complexity: (1) allocate a resource from unallocated resources; (2) release the designated resource from the allocated resources; (3) randomly access a Allocated resources. It roughly means that.
class ResourcePool:
def __init__(self, cap):
self.rc = [i+1 for i in range(cap)]
self.rc[cap-1] = None
self.free = 0
self.allocated = -1
def alloc(self):
rc = None
if self.free is None:
return None
rc = self.free
self.free = self.rc[self.free]
return rc
def release(self, i):
self.rc[i] = self.free
self.free = i
def __str__(self):
return str(self.rc) + "free:" + str(self.free)
if __name__ == "__main__":
rp = ResourcePool(10)
print(rp)
for i in range(5):
print(rp.alloc())
print(rp)
for i in range(0, 5, 2):
rp.release(i)
print(rp)