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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Сделать свой шаблон вектора http://www.cyberforum.ru/cpp-beginners/thread733056.html
надо сделать шаблон вектора,посмотрите то что сделал это правильно? и еще вопрос,можете помочь сделать итератор,а то что то вообще не могу разобраться а так же функцию как у вектора push_back() чтобы в конец добавляла template <class T> class Vector { public: //? int size; T* data;
C++ Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные Здравствуйте.Чёткого ответа на просторах интернета не нашёл , поэтому пишу сюда. Есть класс, нужен динамический массив объектов этого класса .Как реализовать , учитывая , что для каждого экземпляра параметры для конструктора разные ? http://www.cyberforum.ru/cpp-beginners/thread733046.html
QSort для строк C++
Работает не верно. Нельзя использовать стркутуры, классы. void SAlphabetSort(char* String, int iLo, int iHi) //Алгоритм Хоара { //границы подмножества int Lo = iLo; int Hi = iHi; while(*(String + Hi) == ' ' || *(String + Hi) == '\0' || *(String + Hi) == '\n') //поиск конца слова if(Hi) //выбор слова в правом подмножестве Hi--;
C++ Ошибка LINK
error LNK1123: failure during conversion to COFF: file invalid or corrupt Не знаю из-за чего такая ошибка может быть, пытался скомпилить 2 проекта один из них 100% рабочий и на обеих этапах компиляции такая ошибка, что то со студией? тогда что..
C++ Где скачать Borlan С++ http://www.cyberforum.ru/cpp-beginners/thread733006.html
Начал изучать системное программирование. Дали на паре решить задачу дома,уже второй день роюсь не могу найти где скачать Borlan С++ на windows7-64bit. Кто сможет скиньте ссылку! Заранее спасибо!!!
C++ Источники информации Я интересуюсь Java и знаю, что есть хорошие сообщества, которые предоставляют интересный материал, например такие как jug.ru. Вопрос: какие похожие сообщества есть у C++ разработчиков? подробнее

Показать сообщение отдельно
ZiminAS1990
 Аватар для ZiminAS1990
2 / 2 / 0
Регистрация: 27.07.2012
Сообщений: 31
15.12.2012, 22:30     Потокозащищённые классы и их интерфейс
Доброе время суток, уважаемые форумчане!

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

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

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

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

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

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

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

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

Благодарю за ответы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru