Описание тега lock-guard

1 ответ

Может ли использование блокировки мьютекса, принятого lock_guard, привести к UB?

Может ли следующий фрагмент вызвать неповрежденное поведение из-за использования блокировки мьютекса, уже принятого lock_guard? и будет ли безопасно, если я используюunique_lock вместо того lock_guardв том же фрагменте? Я знаю что естьstd::unique_lo…
13 май '20 в 19:44
2 ответа

C++11: поток с мьютексом видит изменение значения атомарной переменной, несмотря на то, что это единственный код, который может его изменить

Атомарная переменная (в данном случае 128-битная структура) обновляется, к удивлению единственного потока, который сможет ее обновить. Как так? Это минимальный пример, поэтому он не делает ничего, что имеет смысл, но: функция alloc() возвращает буфе…
01 июн '20 в 11:22
1 ответ

Что мне следует использовать в этой ситуации lock_guard, scoped_lock или unique_lock?

Я прочитал многие уже отвеченные вопросы, которые касаются этого, но ни один из них не дал мне четкого понимания того, что мне следует использовать, когда у меня есть несколько авторов, но один читатель. Приведенный ниже код является надуманным прим…
25 июл '20 в 10:53
0 ответов

Возврат ссылки из-под замка: идиоматический или чертовски умный?

Предположим, у вас есть структура данных, в которой значения хранятся в узлах, например стандартные карты или списки, и эта структура имеет блокировку для ее защиты. Предположим также, что типы значений ( mapped_type для карт) достаточно сложен, что…
18 мар '21 в 09:21
0 ответов

проблема при доступе к одному и тому же объекту из нескольких потоков одновременно с использованием lock_guard

Peer* Subtracker::getPeer(int packetNum, Peer* p, Peer* nearestP) { lock_guard<mutex> guard(this->m); double d = DBL_MAX; for(auto it:packetToPeersMapping[packetNum]) { double dTemp = sqrt(pow(p->x - it->x, 2) + pow(p->y - (it)-&g…
05 апр '21 в 13:32
1 ответ

Как передать только мьютекс в параметр конструктора lock_guard

Когда объявляют шкафчик как, lock_guard Locker(mLocker); Я хочу, чтобы компилятор определил, является ли mLocker мьютексом. Чтобы реализовать это, я использовал концепцию «требует» и определил ее, как показано ниже. Как и выше, мьютекс был проверен …
15 ноя '21 в 05:32
0 ответов

Lock_guard с ограниченной областью действия не освобождает мьютекс в статическом методе

Платформа Debian 9 | РУКА У меня есть класс, который используется для хранения идентификаторов потоков в std::listа затем распечатать список как часть процедуры выключения. Есть два статических метода: AddId()а также PrintIds(). Поскольку статически…
0 ответов

Вопрос о NamedMutex WaitForSingleObject() и std::lock_guard()

Я видел две реализации NamedMutex: Сделайте оболочку NamedMutex, вызовите CreateMutex(), WaitForSingleObject() в ctor и ReleaseMutex(),CloseHandle() в dtor. Чтобы использовать его, вызовите cNamedMutex mtx(mtxname_). Создайте экземпляр mtx с помощью…
25 янв '21 в 08:09
3 ответа

Почему мьютекс не работает без защиты блокировки?

У меня есть следующий код: #include <chrono> #include <iostream> #include <mutex> #include <thread> int shared_var {0}; std::mutex shared_mutex; void task_1() { while (true) { shared_mutex.lock(); const auto temp = shared_var…
05 май '22 в 08:28
1 ответ

scoped_lock внутри lock_guard, это лишнее?

Я новичок в многопоточном программировании. Сейчас я занимаюсь проектом связи через последовательный порт и ищу соответствующие коды для справки. Я нашел код, который кто-то использовал внутри lock_guardкак показано ниже: void B(){ boost::mutex::sco…
08 мар '22 в 08:55
1 ответ

Что такое блокировка с accept_lock_t

Когда я проверил accept_lock_t, он говоритadopt_lock_t assume the calling thread already has ownership of the mutex. Итак, что означает словоassume? Что, если другой поток уже удерживает мьютекс, когда я запрашиваю блокировку (adopt_lock_t) с тем же…
16 июн '22 в 09:53
0 ответов

Замена `std::bind` на Visual Studio 2019?

У меня есть код, который компилируется с помощью Visual Studio 2017, который использует: std::unique_lock<std::mutex> m_lock(m_mutex_wait_for_message); m_cond_variable.wait(m_lock, std::bind(&Logging::is_message_available, this)); std::loc…
20 сен '22 в 23:52
2 ответа

мьютекс, используемый в функции, определенной внутри класса, похоже, не работает, когда эта функция вызывается в потоке в основном

#include <thread> #include <iostream> #include <mutex> class ThreadLessons { private: std::mutex _threading_mutex_in_class; public: ThreadLessons() {} ThreadLessons(const ThreadLessons &tl) {} ThreadLessons operator=(const Thr…
0 ответов

C++: Вызов метода другого класса с использованием указателя в безопасном потоке?

Я вызываю функцию-член внутри потока. У меня есть переменная-член, которую я редактирую внутри этой функции, для которой я применил блокировку. Подходит ли эта логика или даже чтение должно быть потокобезопасным? Код примерно такой, как показано ниж…
26 июн '22 в 06:34
3 ответа

Проблемы с std::lock_guard<std::mutex> и блокировкой constexpr

Есть шаблон классаFoo<T>. И для какого-то конкретного типа функция должна использоватьlock_guard. Вот пример кода: #include <type_traits> #include <mutex> #include <vector> template<typename T> class Foo { public: void …
24 апр '23 в 06:40
2 ответа

Понимание примера cppreference при блокировке

Читая на C++std::lock, я столкнулся со следующим примером из cppreference : void assign_lunch_partner(Employee &e1, Employee &e2) { static std::mutex io_mutex; { std::lock_guard<std::mutex> lk(io_mutex); std::cout << e1.id <&l…
04 авг '23 в 14:05