해결된 질문
작성
·
187
0
스핀락 강의를 보다가 CAS 의사코드를 써주셨는데
직접 구현할려면 어떻게 해야되나요 ?
이렇게 한번 넣어봤는데 안되서요 ㅠㅠ
class SpinLock
{
public:
void lock()
{
while (CAS(expected, desried) == false) {}
}
void unlock()
{
_locked = false;
}
bool CAS(bool expected, bool desired)
{
if (_locked == expected)
{
expected = _locked;
_locked = desired;
return true;
}
else
{
expected = _locked;
return false;
}
}
private:
atomic<bool> _locked = false;
atomic<bool> expected = false;
atomic<bool> desried = true;
};
답변 1
0
CAS 안에 있는게 한 번에 뿅! 실행되어야 한다가 핵심인데
이를 일반 if else 등으로 직접 구현할 수는 없습니다.
atomic 클래스나 운영체제 별로 존재하는 특수 함수 (Interlocked_AddXXX 등)를
이용할 때의 의사 코드가 저렇다는 것일 뿐이죠.