DECLSPEC_CACHEALIGN ULONG32 KeyGet = 0

DECLSPEC_CACHEALIGN ULONG32 KeyRet = 0

const UONG32 MaxKey = 4; // 적당히(최대 낭비수는 MaxKey - 1)



Container_Object Pool[MaxKey];

// Container_Object 내 자원 입출력은(get/ret) 잠금을 걸던가 무잠금알고리즘 적용

// 잠금을 거는게 유리함(n개씩 채워 넣을때)


// Pool에 자원들을 미리 삽입할때는 n개를 균등하게 분배

// 1회가 아니라 여러번에 걸쳐서라면 알아서 잘




Object Get()

{

auto key = InterlockedAdd(&KeyGet, 1);

key %= MaxKey;//(MaxKey가 2의 배수면 Key &= (MaxKey-1);


auto& pool = Pool[key];

return pool.get()

}


Object Ret()

{

auto key = InterlockedAdd(&KeyRet, 1);

key %= MaxKey;//(MaxKey가 2의 배수면 Key &= (MaxKey-1);


auto& pool = Pool[key];

pool.ret()

}


1개의 임계구역 보다는 여러개가 조금 낫음

더 좋은 생각은 덧글점