Изменения

Перейти к: навигация, поиск

Участник:Qwerty787788/плюсы3сем

1784 байта добавлено, 01:59, 18 января 2013
mutexes (mutex, recuirsive_mutex, shared_mutex)
=== mutexes (mutex, recuirsive_mutex, shared_mutex) ===
mutex - объект, который используется для определения, делает ли с некоторым объектом что-то другой поток.
 
Пример использования. Пусть есть map и треды, которые одновременно в него что-то пишут. Тогда создадим mutex и будем его lock'ать перед тем как использовать map:
 
std::map<std::string, std::string> some_map;
std::mutex some_mutex;
void write_to_map(std::string key, std::string value) {
some_mutex.lock();
some_map[key]=value;
some_mutex.unlock();
}
 
recursive_mutex позволяет треду lock'ать его несколько раз. Пример:
 
void f1() {
_mutex.lock();
// some code
_mutex.unlock();
}
void f2() {
_mutex.lock();
f1(); // deadlock here!
_mutex.unlock();
}
 
Если в данном коде использовать обычный mutex, то программа зависнет (получит deadlock), так как f1 не сможет взять lock и будет ждать. При использовании recursive_mutex все будет нормально (поскольку к объекту обращаются с одного и того же треда, f1 сможет взять lock). Снимать lock нужно столько же раз, сколько и брать, иначе другие потоки не смогут работать с данными.
 
shared_mutex - boost'овая хрень. Читать тут: [http://stackoverflow.com/questions/989795/example-for-boost-shared-mutex-multiple-reads-one-write/4820461#4820461].
 
=== condition_variable ===
=== понятие dead lock ===
81
правка

Навигация