Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ZiminAS1990
2 / 2 / 0
Регистрация: 27.07.2012
Сообщений: 31
#1

Потокозащищённые классы и их интерфейс - C++

15.12.2012, 22:30. Просмотров 278. Ответов 2
Метки нет (Все метки)

Доброе время суток, уважаемые форумчане!

Насколько я понимаю, если мы говорим, что класс потокозащищён, мы подразумеваем что:
1. В приватной зоне класса есть мьютекс
2. Все интерфейсные функции класса при вызове захватывают мьютекс, а по завершении - освобождают его

Это скрывает мьютекс от пользователя. Удобно. Но сегодня я обнаружил вот что:
бывают ситуации, когда для объекта необходимо последовательно вызвать несколько интерфейсных функций так, чтобы между их вызовами мьютекс НЕ освобождался. Выше мы отметили, что мьютекс освобождается каждый раз по завершении работы интерфейсной функции... как тогда быть?

Я рассмотрел такой вариант:
Для каждой интерфейсной функции класса создать функцию с аналогичным именем, но с суффиксом "Safe". Например:
bool installModule();
bool installModuleSafe();
Интерфейсная функция без суффикса не будет потокозащищённой. Весь код функции с суффиксом сводится к захвату мьютекса, вызову функции без суффикса и освобождению мьютекса:

bool installModuleSafe()
{
thrAutoMutex autoMutex(this->mutex);
return installModule();
}

(thrAutoMutex в конструкторе захватыват переданный мьютекс, а в декструкторе - освобождает)

Так же к классу нужно функции lock() и free(), который просто захватывают и освобождают мьютекс.
Обычно пользователь использует безопасные функции, но если ему нужно вызвать несколько функций не освобождая мьютекс, то он вызывает lock(), затем несколько незащищённых интерфейсных функций, а затем free()

Такой вот "самопал" приходит на ум, но уверен, такая проблема вставала уже неограниченное количество раз, и наверняка программисты выработали какое-то стандартное решение, какой-нибудь общепринятый интерфейс для таких классов. В том и вопрос:
Есть ли какие-то стандартные приёмы для решения такой задачи?

А если нету, то насколько адекватным можно считать написанное выше?

Благодарю за ответы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 22:30     Потокозащищённые классы и их интерфейс
Посмотрите здесь:

интерфейс - C++
qt, winAPI, wxWidgets, winForms, MFC... что там еще можно использовать для создания графического интерфейса? Хотелось бы вкратце...

Интерфейс - C++
Задание по практике состоит из программ на си. Нужно написать интерфейс, где пользователь может выбрать номер программы и увидеть решение....

Интерфейс в с++ - C++
Нужно использовать интерфейс. От которого будут наследоваться несколько классов. Но я так понял что нужно использовать абстрактный класс?

Интерфейс на visual c++ - C++
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) { list< TInteger* > set; ...

Интерфейс и реализации - C++
Не понимаю что точно имеют ввиду под определением интерфейса в ООП. Вот например абзац из книги который я до конца не понимаю из-за...

Пользовательский интерфейс - C++
Доброго времени суток! У меня стал такой вопрос, хочется создать свой, пользовательский интерфейс, а не пользоваться стандартными...

Пользовательский интерфейс в С++ - C++
Мне нужен пользовательский интерфейс(кнопки, отдельный окна настроек, чекбоксы и тп.) на сервере. Как его лучше делать используя Qt или MFC...

Графический интерфейс - C++
Парни может кто подсказать, как на Visual Studio сделать графический интерфейс???

Пользовательский интерфейс - C++
Доброго времени суток, есть вопрос о пользовательском интерфейсе верней как его создать. Хочу именно на Си не на Cи++ не С# только Си(пишу...

Графический интерфейс - C++
Есть написанная программа "Словарь" (консольное приложение), к ней надо сделать графический интерфейс) подскажите пожалуйста как это...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2012, 22:38     Потокозащищённые классы и их интерфейс #2
вполне себе адекватно на мой взгляд.
только бы по умолчанию, основной класс я бы не стал загромождать потокозащищенными функциями, а сделал бы это в отдельном классе-обертке, который бы и хранил мьютекс и захватывал бы его, перед перевызовом основной функции. это не всегда может прокатить, но в случае, когда на весь класс один мьютекс - вполне себе.
ZiminAS1990
2 / 2 / 0
Регистрация: 27.07.2012
Сообщений: 31
15.12.2012, 23:04  [ТС]     Потокозащищённые классы и их интерфейс #3
Цитата Сообщение от DU Посмотреть сообщение
вполне себе адекватно на мой взгляд.
только бы по умолчанию, основной класс я бы не стал загромождать потокозащищенными функциями, а сделал бы это в отдельном классе-обертке, который бы и хранил мьютекс и захватывал бы его, перед перевызовом основной функции. это не всегда может прокатить, но в случае, когда на весь класс один мьютекс - вполне себе.
О! Класс-обёртка с мьютексом внутри - хорошая идея, спасибо
Ответ Создать тему
Опции темы

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