リソースプールを設計すると、次の3つの操作がOに適合します。(1)複雑さ:(1)割り当てられていないリソースからリソースを割り当てる、(2)指定されたリソースを割り当てられたリソースから解放する、(3)ブロックにランダムにアクセスする割り当てられたリソース。おおよその意味です。
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)