この件についてアドバイスをいただければ幸いです。
例えば
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;
}
};
事前にコメントやご意見をお寄せいただきありがとうございます。
ファティ