나는이 문제에 대해 조언 해 주시면 고맙겠습니다.외부 세계와 스레드 안전 방식으로 데이터 멤버를 공유
class Foo
{
TData data;
public:
TData *getData() { return &data; } // How can we do this in a thread safe manner ?
};
따라서 스레드로부터 안전하도록 getData()
메커니즘을 만들고 싶습니다. 나는 그것에 대한 액세스를 동기화하는 데 사용되는 뮤텍스와 함께 다음 템플릿 클래스에 데이터 멤버를 패키징하는 자체 솔루션을 생각해 냈습니다. 어떻게 생각해 ? 가능한 문제는 무엇입니까?
class locked_object : boost::noncopyable
{
T *object;
TLockable *lock;
bool locked;
public:
locked_object(T *_object, TLockable *_lock) : object(_object), lock(_lock), locked(true)
{
lock->lock();
}
~locked_object()
{
lock->unlock();
}
T *get()
{
_ASSERT(locked);
if (!locked)
throw new std::exception("Synchronization error ! Object lock is already released !");
return this->tobject;
}
void unlock()
{
locked = false;
lock->unlock();
}
T *operator ->() const
{
_ASSERT(locked);
if (!locked)
throw new std::exception("Synchronization error ! Object lock is already released !");
return this->tobject;
}
operator T *() const
{
_ASSERT(locked);
if (!locked)
throw new std::exception("Synchronization error ! Object lock is already released !");
return this->tobject;
}
};
미리 의견을 보내 주셔서 감사합니다.
afat
들여 쓰기 된 코드 블록에서'& gt' (어쨌든';'가 누락 됨)을 쓸 필요가 없습니다. '> '라고 써주십시오. –
복사본을 구할 수 있다면 Alexandrescu의 Modern C++ Design *을보십시오. –