我正在評審一位同事的Visual Studio 2008 C++ 03應用程序應用程序,並且我遇到了一個線程同步原語的實現(見下文)。這個同步對象實現線程安全嗎?
假設SyncObject
正確實施,是在下面的代碼中使用布爾值來知道資源是否鎖定或解鎖線程安全?如果不是,你可以通過一個「ThreadA」來做到這一點,而「ThreadB」做到這一點,所以我理解你的邏輯?
class CMyLock
{
public:
CMyLock(SyncObject* object)
: object_(object), acquired_(false)
{
};
// return true if the resource is locked within the given timeout period
bool Lock(DWORD dwTimeOut = INFINITE)
{
acquired_ = object_->Lock(dwTimeOut);
return acquired_;
};
// return true if the resource is unlocked
bool Unlock()
{
if (acquired_)
acquired_ = !object_->Unlock();
return !acquired_;
};
// return true if the resource is locked
bool IsLocked() { return acquired_; };
private:
bool acquired_;
// some thread synchronization primitive
SyncObject* object_;
};
不使用RAII =失敗。 –
不,它可以存儲在註冊表,緩存和任何其他因爲優化而存在的內容。 –
你能走過我會遇到失敗的情況嗎? – PaulH