Описание тега 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(). Поскольку статически…
14 янв '22 в 05:02
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…
09 фев '23 в 12:05
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