同僚の 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_;
};