7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182

Атомарная операция

17.02.2016, 17:24. Показов 1438. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть такой класс:
C++
1
2
3
4
5
6
7
8
class CClass
{
public:
    bool state() const {return state_;}
private:
    bool state_ = false;
    std::mutex  mutex_;
};
Как сделать state() атомарной?
Пробовал сделать state() так:
C++
1
2
3
4
5
6
7
8
bool CClass::state() 
{
    bool a;
    mutex_.lock();
    a= state_;
    mutex_.unlock();
    return a;
}
Программа все-равно падает...
Вообще, state_ имеет другой тип состоящий из структуры, здесь написал bool для краткости.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2016, 17:24
Ответы с готовыми решениями:

операция <<::>>
имею код char Car::*Get_Marka(){ return marka ; } char Car::*Get_Color() { return color ; } bool Car::Get_Rastamojena() { return...

Атомарная операция
Всем добрый день. Я только начал изучать язык и прошу помочь разобраться. Как в методе transfer сделать атомарную операцию по...

Атомарная группировка в PHP
Читаю сейчас всеми известную книгу - Дж.Фридл - &quot;Регулярные выражения&quot;. Дошел до момента с атомарной группировкой, и у меня загвоздка....

9
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2063
Регистрация: 27.09.2012
Сообщений: 27,001
Записей в блоге: 1
17.02.2016, 17:44
C++
1
std::atomic<Type> state_ ;
А вообще, смотря как всё это дело использовать.
0
-L
15 / 9 / 12
Регистрация: 03.12.2015
Сообщений: 79
17.02.2016, 20:52
Ээм... А чем вариант с мьютексом плох? Не вижу причины для падения.

Кстати, если делать std::atomic структуры, то Вы сможете только потокобезопасно читать и писать в неё целиком. У вас не будет атомарного доступа к отдельным элементам. Только выгрузка load() и использование как обычно. Если же делать атомарными элементы структуры, то действует обратное правило - отдельные эелементы будут атомарны, а вся структура нет. Насколько мне известно atomic по сути использует тот же мьютекс
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2063
Регистрация: 27.09.2012
Сообщений: 27,001
Записей в блоге: 1
17.02.2016, 21:31
-L, думаю, падения связаны с тем,
что сам интерфейс класса заточен под однопоточное
использование. Тут нужно либо менять его,
либо лочить уже во внешнем коде.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
18.02.2016, 09:37  [ТС]
Цитата Сообщение от -L Посмотреть сообщение
Ээм... А чем вариант с мьютексом плох? Не вижу причины для падения.
У меня много различных классов, объекты которых зачастую работают в многих потоках (вообще программа должна работать на сервере, так что объектов много и потоков тоже). И мьютексы, предполагаю, должны быть глобальными и их должно быть много. мьютексы принадлежащие какому-то классу, где они нужны - также разрушаются при попытке доступа к ним с другого потока параллельно.

Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
std::atomic<Type> state_ ;
А возможно это сделать для пользовательского (произвольного) типа?
И использование этого свойства после такого объявления будет как обычно в коде? Т.е. state_ == true?

Цитата Сообщение от Croessmah Посмотреть сообщение
либо лочить уже во внешнем коде.
Внешний код?
0
-L
15 / 9 / 12
Регистрация: 03.12.2015
Сообщений: 79
18.02.2016, 10:21
Цитата Сообщение от feck Посмотреть сообщение
мьютексы принадлежащие какому-то классу, где они нужны - также разрушаются при попытке доступа к ним с другого потока параллельно.
Мьютексы как раз для этих целей и нужны вроде как.

Что значит разрушаются? Если Вы удаляете мьютекс, пока он кем-то залочен, то это может привести к чему угодно.

Также если Вы внутри одного потока попробуете повторно залочить уже залоченный ранее std::mutex, то вылетит ошибка. Для решения таких проблем существует std::recursive_mutex (количество попыток залочить который внутри одного потока тоже не безгранично, кстати)
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
18.02.2016, 10:57  [ТС]
В общем, сделал атомарной и все-равно программа падает при попытке чтения этого значения...
0
19428 / 10044 / 2447
Регистрация: 30.01.2014
Сообщений: 17,714
18.02.2016, 11:39
Цитата Сообщение от feck Посмотреть сообщение
все-равно программа падает при попытке чтения этого значения
Так это может быть дело и не в многопоточности.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
18.02.2016, 12:48  [ТС]
DrOffset, да, может быть. Сейчас открыл журнал windows и обнаружил, что Access violation reading location 0x00000020. Походу, указатель на объект "промахивается".

Добавлено через 1 час 3 минуты
Да, атомные операции оказались вообще не нужны. Ошибка была совсем из-за другого.
P.S. теперь всегда буду проверять указатели на nullptr перед использованием)
0
19428 / 10044 / 2447
Регистрация: 30.01.2014
Сообщений: 17,714
18.02.2016, 12:51
Цитата Сообщение от feck Посмотреть сообщение
P.S. теперь всегда буду проверять указатели на nullptr перед использованием)
Лучше с отладчиком разобраться. Такие ошибки с ним находятся на счет раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2016, 12:51
Помогаю со студенческими работами здесь

Операция (1С 7.7)
Как при проведении документа записать его в операцию со значением реквизита &quot;Документ&quot; (В операции) с именем документа а не с...

Операция *new
Добрый вечер. Просматривая исходники QCalendarWidget, обнаружил странную форму записи new, вот так: ...

Операция $this->
Здравствуйте. Учу ООП. И не понимаю написанное в книге: &quot;Операция $this-&gt; принадлежит отдельному объекту класса, то есть не целиком...

Операция присваивания (=)
Добрый день, интересует вот что: правильно ли я считаю, что в int x = .0 + 1F + 4L; 1) Сперва все операнды сложения (по правую...

Битовая операция
Выполнить проверку заданного (вводится с клавиатуры) бита числа В и если заданный бит имеет значение «ЛОЖЬ»(равен 0) , установить его. ...


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

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

Новые блоги и статьи
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Полностью асинхронный счётчик на логике (сумматорах) трёх состояний и асинхронных регистрах трёх состояний. Структура "электронный Buttom Up"
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru