이 코드는 스레드 안전합니까? 함수 sig에 휘발성이 있어야합니까? (예 : void Unlock() volatile {v=0;}
)이 스레드 세이프를 만드는 방법이 아닌 경우? 성공할 때까지 루프에서 CAS를 호출하지 않기 때문에 당신이 TryLock
에 Lock
의 이름을 바꿀 수 있지만이 간단한 (원자) 잠금 스레드가 안전합니까?
class SimpleLock {
std::atomic<int> v;
public:
bool try_lock() { int z=0; return v.compare_exchange_strong(z, 1); }
void lock() { while(try_lock()==false) std::this_thread::yield(); }
void unlock() {v=0;}
};
이 코드는 장난감 코드이므로 실제 응용 프로그램에서 사용해서는 안됩니다. 적절한 잠금 장치에 비해 성능이 심각합니다. (단지 하나의 예로서, 양보 할 다른 스레드가없고'lock '을 호출하는 스레드가 잠금을 보유하고있는 스레드와 동일한 물리적 코어에서 실행 중인지 상상해보십시오.) 아! –