Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
1

Применение рекурсивных мьютексов

14.04.2017, 23:05. Показов 2009. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задался таким вопросом - является ли применение рекурсивных мьютексов признаком плохой архитектуры? Понятное дело, что у разных вещей своё назначение, поэтому лучше пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Data
{
    int a;
    int b;
};
 
Data data;
 
void update_data1()
{
    std::lock_guard<std::mutex> lock(m_mutex);
    // каким-то образом изменяются поля data
}
 
void update_data2()
{
    std::lock_guard<std::mutex> lock(m_mutex);
    // каким-то образом изменяются поля data
}
Тут вроде всё хорошо, но наступает момент, когда нужно использовать функцию вроде

C++
1
2
3
4
5
6
void complex_update()
{
    // хочется использовать блокировку тут, чтобы операция complex_update была атомарна для других потоков
    update_data1();
    update_data2();
}
Тот же самый мьютекс тут использовать не получится, т.к. будет дедлок. Первое, что приходит в голову - recursive_mutex. Является ли это решение хорошим в данном случае?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2017, 23:05
Ответы с готовыми решениями:

Реальное применение рекурсивных вычислений
Добрый день. Ползая по форуму https://www.cyberforum.ru я обратил внимание, что довольно часто...

Синхронизация процессов при помощи мьютексов
начал разбираться с мбютексами, а точнее как синхронизировать 2 рпоцесса с их помощью. #include...

Когда нужно лочить ( делать lock() ) сразу нескольких мьютексов
Здравствуйте товарищи девелоперы! Прошу прощения за банальный в своем роде вопрос, однако когда...

Использование рекурсивных методов
Потрібен приклади використання рекурсивних методів / надо примеры использование рекурсивных методов...

3
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
15.04.2017, 10:11 2
Насколько я знаю, для таких случае его и придумали
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
15.04.2017, 10:20 3
Можно сделать функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void update_data1_nonlock()
{
   //функция не захватывает mutex
}
 
void update_data1()
{
   //захват мьютекса
   update_data1_nonlock();
}
 
void complex_update()
{
   //захват мьютекса
   update_data1_nonlock();
   update_data2_nonlock();
}
1
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
15.04.2017, 12:14 4
Лучший ответ Сообщение было отмечено mishelle92 как решение

Решение

Цитата Сообщение от mishelle92 Посмотреть сообщение
Задался таким вопросом - является ли применение рекурсивных мьютексов признаком плохой архитектуры?
Нет, не является.

Возможность рекурсивного захвата блокировки - очень полезная фича,
без которой иногда очень тяжело.
1
15.04.2017, 12:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2017, 12:14
Помогаю со студенческими работами здесь

Использование рекурсивных функций
Дан массив x, . . . , x, состоящий из целых чисел, и целое число y. Найти количество элементов...

В чем преимущество рекурсивных функций?
Насколько я понял, любую рекурсивную функцию можно реализовать итерационно. И при этом,...

Алгоритм решения рекурсивных функций
Цель: Прошу подсказать алгоритм решения рекурсивной функции. Задача:

Задачи на использование рекурсивных функций
1. Создайте рекурсивную функцию, которая выводит на экран простые множители числа. 2. Создайте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru