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개의 임계구역 보다는 여러개가 조금 낫음
더 좋은 생각은 덧글점
댓글 0