Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
Погуглил сам, но хотел бы сделать тут подитог. shared_mutex - когда намного больше потоков заняты чтением данных, а перезапись этих же данных относительно редкая и выполняется малым числом потоков по сравнению с числом тех потоков, которые считавают эти же данные. recursive_mutex - когда поток может многократно вызывать одну и ту же функцию, в которой приходится захватывать один и тот же mutex. Он более медленный по сравнению с обычным mutex. И ещё: необходимо ли при чтении/записи данных использовать блокировку при чтении, если величина данных до 8 байт на x64 и до 4 байт на x86? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 23:17 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
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) - не поддерживается, а так же порядок выполнения операций с разными переменными разделяемыми между потоками - не определён ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 01:03 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
Допустим, два потока периодически считывают целочисленную переменную, занимающую 8 байт на x64, а ещё 2 инкрементируют её. Зачем нужна синхронизация для тех потоков, которые её считывают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 02:58 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
code_cppДопустим, два потока периодически считывают целочисленную переменную, занимающую 8 байт на x64, а ещё 2 инкрементируют её. Зачем нужна синхронизация для тех потоков, которые её считывают? А что такое синхронизация, это: spilling, filling, alignment, ordering или rmw-atomic? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 21:15 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, я и пытаюсь выяснить, нужна ли она в том случае, который я описал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 18:32 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
code_cppВася Уткин, я и пытаюсь выяснить, нужна ли она в том случае, который я описал. Нужна: filling, alignment. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 19:37 |
|
||
|
Для чего нужны shared_mutex и recursive_mutex?
|
|||
|---|---|---|---|
|
#18+
code_cppВася Уткин, я и пытаюсь выяснить, нужна ли она в том случае, который я описал. Не факт что считывание вообще будет в описанном случае 20607768 , т.к. без доп.указаний компилятор может решить хранить эту переменную в регистре и чтения из памяти в коде вообще не будет. Как минимум надо volatile, лучше atomic<> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 20:25 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39481399&tid=2018134]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 528ms |

| 0 / 0 |
