Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Mindz
7 / 7 / 1
Регистрация: 31.01.2010
Сообщений: 51
1

Std::atomic vs std::mutex

12.06.2015, 22:28. Просмотров 813. Ответов 1
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class AtomicSome
{
    private:
 
        std::atomic_bool    _isReady; //not std::atomic_flag
 
    public:
 
        AtomicSome() :
            _isReady(false) { }
 
        ~AtomicSome() = default;
 
        inline bool isReady() const
        {
            return _isReady;
        }
 
        inline void fire()
        {
            _isReady = true;
        }
 
        void doSomeTask()
        {
            if (_isReady) {
                //do something
                _isReady = false;
            } else {
                //do another thing
                fire();
            }
        }
};
 
class MutexSome
{
    private:
 
        mutable std::mutex      _mutex;
        volatile bool                _isReady;
 
    public:
 
        MutexSome() :
            _isReady(false) { }
 
        ~MutexSome() = default;
 
        bool isReady() const
        {
            std::lock_guard<std::mutex> guard(_mutex);
 
            return _isReady;
        }
 
        void fire()
        {
            std::lock_guard<std::mutex> guard(_mutex);
 
            _isReady = true;
        }
 
        void doSomeTask()
        {
            std::lock_guard<std::mutex> guard(_mutex);
 
            if (_isReady) {
                //do something
                _isReady = false;
            } else {
                //do another thing
                fire();
            }
        }
};
В обоих ли случаях доступ к флагу будет потокобезопасным?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2015, 22:28
Ответы с готовыми решениями:

Std::mutex и std::recursive_mutex
Есть некий класс: class A { public bool some_method(); ...

Пример о необходимости std::atomic
Изучаю std::atomic. Пытаюсь сделать пример, при котором приложение упадет, без...

Стоит ли использовать std::atomic?
Доброго времени суток. Есть переменная в &quot;поток 2&quot; (назовем так) const...

Std::atomic выбор конструктора
недавно коллега вкомитил строчку вроде этой std::atomic&lt;int&gt; at = 3;...

Std::atomic и другие объекты
Добрый день! Подскажите пожалуйста можно ли создать ...

1
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
13.06.2015, 11:19 2
Цитата Сообщение от Mindz Посмотреть сообщение
В обоих ли случаях доступ к флагу будет потокобезопасным?
доступ-то будет, а вот логика работы мне не ясна до конца.
функция doSomeTask() в двух имплементациях у вас работает по разному принципу, во втором случае она может выполняться только 1 потоком за раз, в первом варианте - нет.

Добавлено через 2 минуты
во втором варианте, кстати, при вызове fire() из doSomeTask() будет блокировка мутекса
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2015, 11:19

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил...

Std::atomic. Реализация свободного от блокировок стека
Всем привет. Читаю книгу Параллельное программирование на с++ в действии Энтони...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru