lexluther Опубликовано 6 февраля, 2007 Жалоба Поделиться Опубликовано 6 февраля, 2007 Всем привет! Помогите пожалуйста решить следующую проблему: У меня есть некий класс A который имеет некую переменную B. Я создаю N таких объектов в памяти, и потом из двух или более разных потоков (многозадачность) меняю вышеупомянутую переменную в каждом конкретном объекте по разному и в разное время. Проблема в том что мне НЕЛЬЗЯ чтобы к этой переменной в одном отдельно взятом созданном в памяти объекте мог получить доступ более чем один поток одновременно. В теории это можно решить при помощи создания отдельного объекта CRYTICAL_SECTION для каждого созданного экземпляра класса и защитой этой критической секцией метода присвоения переменной значения. Но объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае? С уважением. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 6 февраля, 2007 Жалоба Поделиться Опубликовано 6 февраля, 2007 Ну, для начала надо бы уточнить язык реализации. Если рассматривать теорию параллельных вычислений - для рещения задачи доступа к разделяемым переменным используются мьютексы. А для конкретного решения надо рассматривать инструментарий, предлагаемый используемым языком программирования. Ссылка на комментарий Поделиться на другие сайты Поделиться
lexluther Опубликовано 6 февраля, 2007 Автор Жалоба Поделиться Опубликовано 6 февраля, 2007 Ну, для начала надо бы уточнить язык реализации. Если рассматривать теорию параллельных вычислений - для рещения задачи доступа к разделяемым переменным используются мьютексы. А для конкретного решения надо рассматривать инструментарий, предлагаемый используемым языком программирования. С++ чистый WinAPI. Скажем мне нужно запретить одновременный доступ к переменной класса, но для каждого созданного объекта отдельно. В смысле чтоб блокирование этой переменной не блокировало изменение этой же переменной в других экземплярах этого класса. Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 7 февраля, 2007 Жалоба Поделиться Опубликовано 7 февраля, 2007 Скажем мне нужно запретить одновременный доступ к переменной класса, но для каждого созданного объекта отдельно. В смысле чтоб блокирование этой переменной не блокировало изменение этой же переменной в других экземплярах этого класса. Если CRYTICAL_SECTION будет обьектом в класе (а не одним для всех класов) то он и не будет блокировать изменение этой же переменной в других экземплярах. Ссылка на комментарий Поделиться на другие сайты Поделиться
lexluther Опубликовано 7 февраля, 2007 Автор Жалоба Поделиться Опубликовано 7 февраля, 2007 Если CRYTICAL_SECTION будет обьектом в класе (а не одним для всех класов) то он и не будет блокировать изменение этой же переменной в других экземплярах. А как много я могу создать элементов CRYTICAL_SECTION в одной программе? Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 7 февраля, 2007 Жалоба Поделиться Опубликовано 7 февраля, 2007 А как много я могу создать элементов CRYTICAL_SECTION в одной программе? class A{ private: CRITICAL_SECTION m_CS; int v; public: A(); ~A(); void SetV( int nV) { ::EnterCriticalSection( & m_CS ); v = nV; ::LeaveCriticalSection( & m_CS );}} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти