Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Проблема многопоточного доступа к переменной


Рекомендуемые сообщения

Всем привет!

Помогите пожалуйста решить следующую проблему:

У меня есть некий класс A который имеет некую переменную B. Я создаю N таких объектов в памяти, и потом из двух или более разных потоков (многозадачность) меняю вышеупомянутую переменную в каждом конкретном объекте по разному и в разное время. Проблема в том что мне НЕЛЬЗЯ чтобы к этой переменной в одном отдельно взятом созданном в памяти объекте мог получить доступ более чем один поток одновременно. В теории это можно решить при помощи создания отдельного объекта CRYTICAL_SECTION для каждого созданного экземпляра класса и защитой этой критической секцией метода присвоения переменной значения. Но объектов планируется до сотни тысяч в памяти. Как мне поступить в этом случае?

С уважением.

Ссылка на комментарий
Поделиться на другие сайты

Ну, для начала надо бы уточнить язык реализации.

Если рассматривать теорию параллельных вычислений - для рещения задачи доступа к разделяемым переменным используются мьютексы. А для конкретного решения надо рассматривать инструментарий, предлагаемый используемым языком программирования.

Ссылка на комментарий
Поделиться на другие сайты

Ну, для начала надо бы уточнить язык реализации.

Если рассматривать теорию параллельных вычислений - для рещения задачи доступа к разделяемым переменным используются мьютексы. А для конкретного решения надо рассматривать инструментарий, предлагаемый используемым языком программирования.

С++ чистый WinAPI.

Скажем мне нужно запретить одновременный доступ к переменной класса, но для каждого созданного объекта отдельно. В смысле чтоб блокирование этой переменной не блокировало изменение этой же переменной в других экземплярах этого класса.

Ссылка на комментарий
Поделиться на другие сайты

Скажем мне нужно запретить одновременный доступ к переменной класса, но для каждого созданного объекта отдельно. В смысле чтоб блокирование этой переменной не блокировало изменение этой же переменной в других экземплярах этого класса.

Если CRYTICAL_SECTION будет обьектом в класе (а не одним для всех класов) то

он и не будет блокировать изменение этой же переменной в других экземплярах.

Ссылка на комментарий
Поделиться на другие сайты

Если CRYTICAL_SECTION будет обьектом в класе (а не одним для всех класов) то

он и не будет блокировать изменение этой же переменной в других экземплярах.

А как много я могу создать элементов CRYTICAL_SECTION в одной программе?

Ссылка на комментарий
Поделиться на другие сайты

А как много я могу создать элементов 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 );}}
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...