powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Для чего нужны shared_mutex и recursive_mutex?
7 сообщений из 7, страница 1 из 1
Для чего нужны shared_mutex и recursive_mutex?
    #39481372
code_cpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погуглил сам, но хотел бы сделать тут подитог.
shared_mutex - когда намного больше потоков заняты чтением данных, а перезапись этих же данных относительно редкая и выполняется малым числом потоков по сравнению с числом тех потоков, которые считавают эти же данные.
recursive_mutex - когда поток может многократно вызывать одну и ту же функцию, в которой приходится захватывать один и тот же mutex. Он более медленный по сравнению с обычным mutex.

И ещё: необходимо ли при чтении/записи данных использовать блокировку при чтении, если величина данных до 8 байт на x64 и до 4 байт на x86?
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39481399
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
code_cppИ ещё: необходимо ли при чтении/записи данных использовать блокировку при чтении, если величина данных до 8 байт на x64 и до 4 байт на x86?
Есть 2 правильных варианта:
1. защищаешь операции с этими 8 байтами какой-то блокировкой (mutex, shared_mutex, ..., std::promise/std::future, ...)
2. эти 8 байт определяешь как std::atomic<uint64_t> и работаешь с ними без блокировок


И 2 неправильных варианта для извращенцев:

3. эти 8 байт определяешь как alignas(8) uint64_t и после записи вызываешь функцию std::atomic_thread_fence(std::memory_order_seq_cst) ;, а перед чтением вызываешь функцию std::atomic_thread_fence(std::memory_order_seq_cst); , в этом случае поддерживаются только чтение и запись, но атомарность RMW-операций (+=, ++, ..., cas, swap) - не поддерживается

4. эти 8 байт определяешь как volatile alignas(8) uint64_t - в этом случае также поддерживаются только чтение и запись, но атомарность RMW-операций (+=, ++, ..., cas, swap) - не поддерживается, а так же порядок выполнения операций с разными переменными разделяемыми между потоками - не определён
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39481406
code_cpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, два потока периодически считывают целочисленную переменную, занимающую 8 байт на x64, а ещё 2 инкрементируют её.
Зачем нужна синхронизация для тех потоков, которые её считывают?
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39482113
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
code_cppДопустим, два потока периодически считывают целочисленную переменную, занимающую 8 байт на x64, а ещё 2 инкрементируют её.
Зачем нужна синхронизация для тех потоков, которые её считывают?
А что такое синхронизация, это: spilling, filling, alignment, ordering или rmw-atomic?
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39483361
code_cpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

я и пытаюсь выяснить, нужна ли она в том случае, который я описал.
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39483388
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
code_cppВася Уткин,

я и пытаюсь выяснить, нужна ли она в том случае, который я описал.
Нужна: filling, alignment.
...
Рейтинг: 0 / 0
Для чего нужны shared_mutex и recursive_mutex?
    #39483402
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
code_cppВася Уткин,

я и пытаюсь выяснить, нужна ли она в том случае, который я описал.
Не факт что считывание вообще будет в описанном случае 20607768 , т.к. без доп.указаний компилятор может решить хранить эту переменную в регистре и чтения из памяти в коде вообще не будет. Как минимум надо volatile, лучше atomic<>
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Для чего нужны shared_mutex и recursive_mutex?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]