Advanced articles --------- Design an O (1) resource pool

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)


 

Published 230 original articles · 160 praises · 820,000 views

Guess you like

Origin blog.csdn.net/happyAnger6/article/details/104742015