Как я могу помешать другому потоку получить доступ или прочитать ресурс объекта? Как, например, в методе, я хочу заблокировать этот метод при вызове метода, обращающегося к ресурсу объекта, чтобы другой поток при вызове этого метода не получал доступ к ресурсу экземпляра, пока первый поток обращался к нему?
Как например,
int CFoo::FooReadData( int tag )
{
std::map<int, int>::const_iterator iter = resource.find(tag);
return *iter.second;
}
В вышеупомянутом методе я хочу запретить другому вызывающему потоку обращаться к «ресурсу», в то время как другой поток обращается к нему.
Благодарю.
Вы можете использовать структуры данных ThreadSafe, такие как Intel TBB.
но в вашем примере:
определить мьютекс:
std::mutex m;
int CFoo::FooReadData( int tag )
{
std::lock_guard(m);
std::map<int, int>::const_iterator iter = resource.find(tag);
return *iter.second;
}
(Однако вам нужен компилятор c ++ 11 для использования таких типов данных, как std::mutex
)
Других решений пока нет …