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

Безопасный список в многопоточной программе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывод данных в виде таблицы в C++ http://www.cyberforum.ru/cpp-beginners/thread504875.html
Существует ли возможность вывода (записи) данных в виде таблиц в C++?
C++ Как дать доступ к разделенной памяти для пользовательских программ из сервиса У меня такая проблема, при запуске компьютера стартует сервис с правами SYSTEM. Этот сервис создает разделенную память и помещает в нее идентификатор потока, который может получать сообщения от пользователей. Сообщения передаются с помощью PostThreadMessage. Проблема в том, что когда клиент пытается открыть доступ к памяти с помощью OpenFileMapping, то он получает хендл равный 0. Как я понимаю,... http://www.cyberforum.ru/cpp-beginners/thread504760.html
C++ Алгоритмы анализа программных кодов на выявление недекларированных возможностей
Помогите пожалуйсто. Необходим материал (литература, ссылки на исходные тексты анализаторов кодов) по алгоритмам анализа программных кодов на выявление недекларированных возможностей (нежелательных закладок). В частности описание статического и динамического алгоритмов анализа, а также сигнатурно-эвристического. Хотелось бы посмотреть исходные тексты программ-анализаторов. материал...
C++ Алгоритм отправки файла на почту
Как осуществить оправку текстового файла допустим на 777@mail.ru Буду благадарен любой информации особенно исходникам :-)
C++ Как эмулировать нажатие F3 в CBuilder? http://www.cyberforum.ru/cpp-beginners/thread504416.html
как eмулировать нажатие F3 в CBuilder ?
C++ Код ошибки при вызове функции через "system" Операционная система типа Unix. Вызываю команду mount через system: system("mount /mnt/floppy"). В случае ошибки, результат system один и тот же, хотя варианты ошибок разные. Очень хотелось бы получить код возврата команды mount. Подскажите пожалуйста, если кто сталкивался. подробнее

Показать сообщение отдельно
Zerg1
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 52

Безопасный список в многопоточной программе - C++

17.07.2006, 16:10. Просмотров 2000. Ответов 4
Метки (Все метки)

Итак, пусть есть некоторая программа. Предположим, что это игровой сервер. Необходимо вести в программе глобальный список и гроков, которые в данный момент есть на сервере. Программа многопоточная, то есть, грубо говоря, для каждой игры создаётся поток, и все потоки лазают к этому списку, добавляют элементы, удаляют, модифицируют. Создан класс PLAYER, там несколько перемнных и массивов. И класс PLIST, который поддерживает всю логику работы с списком объектов. Это вступление.
Вопрос. Как организовать всё это безопасно для многопоточной программы?
Использовать в вызывающем коде входы и выходы в одну глобальную критическую секцию - не очень правильно, до фига места займёт и не красиво.
Я в самом объекте PLIST завёл критическую секцию и каждаю публичная функция работы со списком вначале входит в неё, а при выходе выходит.
Но возникает другая проблема. Предположим, я вызвал функцию поиска. Она корректно отработала и вернула мне указатель на найденный объект списка, НО... Использовать этот указатель нельзя. Другая нить могла уже грохнуть объект по нему.
Получается надо, чтобы при вызове фунок работы со списком они внутри вызывали блокировку, а в вызывающем коде при завершении работы с тем, что ни вернули, вручную вызываьб разблокировку.
Вобщем, замкнутый круг, помогите чем можите. Хочется покарсивше и поизящней. ОЧЕНЬ ЖЕЛАТЕЛЬНО на чистом си++.
Какие есть вообще подходы к решению проблемы? Наверняка я не первый. Что-то же человечество должно было придумать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru