Запретить другой поток для чтения ресурсов

Как я могу помешать другому потоку получить доступ или прочитать ресурс объекта? Как, например, в методе, я хочу заблокировать этот метод при вызове метода, обращающегося к ресурсу объекта, чтобы другой поток при вызове этого метода не получал доступ к ресурсу экземпляра, пока первый поток обращался к нему?

Как например,

int CFoo::FooReadData( int tag )
{
std::map<int, int>::const_iterator iter = resource.find(tag);

return *iter.second;
}

В вышеупомянутом методе я хочу запретить другому вызывающему потоку обращаться к «ресурсу», в то время как другой поток обращается к нему.

Благодарю.

0

Решение

Вы можете использовать структуры данных 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)

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector