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

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

Войти
Регистрация
Восстановить пароль
 
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
#1

Синхронизация доступа - C++

30.08.2011, 10:16. Просмотров 570. Ответов 5
Метки нет (Все метки)

Собственно есть массив структур. У данной структуры есть переменная, которая хранит состояние данной структуры(готова,не готова). В процессе работы приложение (многопоточное) циклично проверяет этот массив структур на готовность тех или иных структур, обращаясь к этой переменной каждой структуры, при этом такой опрос происходит в различных потоках программы. Значение переменной при опросе не меняется. Просто сравнивается с неким значением. И собственно вопрос. Не возникнет ли проблем, если я ни как не буду синхронизировать доступ к данным переменным?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2011, 10:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Синхронизация доступа (C++):

Синхронизация доступа к разделяемой памяти - C++
Когда потоки являются дочерними по отношению к процессу тут все просто - объект мьютекса находится в общей памяти и используя этот объект...

Синхронизация доступа к данным с использованием std::mutex - C++
Почему при использовании мьютексов их обычно создают где то в отдаленной от вызова области? Стандартный пример выглядит приблизительно...

почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? - C++
почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён?

Синхронизация - C++
Помогите, пожалуйста, в общих чертах рассказать про синхронизацию процессов на основе механизма обмена сообщениями. как это примерно должно...

Синхронизация потоков в c++ - C++
Совершенно не понятно что не так и как правильно. Задача: Отсортировать массив целых чисел. Программу разбить на два синхронизированных...

синхронизация в windows - C++
есть два консольных приложения, родительского и дочернего процесса (должны ли они быть консольными), хочу обменяться между ними...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.08.2011, 10:31 #2
Aneron, полагаю, возникнет. При опросе-то значение переменной не меняется, а вот один поток может (может?) изменить готовность в момент опроса другим потоком.
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
30.08.2011, 10:40  [ТС] #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Aneron, полагаю, возникнет. При опросе-то значение переменной не меняется, а вот один поток может (может?) изменить готовность в момент опроса другим потоком.
А процессе изменения готовности я хочу обернуть в функцию InterlockedIncrement/InterlockedDecrement.
За счет этого потоки всегда будут получать корректное значение переменной готовности.
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.08.2011, 11:28 #4
Цитата Сообщение от Aneron Посмотреть сообщение
А процессе изменения готовности я хочу обернуть в функцию InterlockedIncrement/InterlockedDecrement.
Ну а в чем тогда собственно вопрос?
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
30.08.2011, 12:07 #5
Если только читаешь массив какие тут могут возникнуть проблемы, конечно если тебе нужен последовательные операции, например: один поток проверил значение запустил какую нибудь операцию, а другому потоку нужно уже после того как предыдущий закончит работу далее запускать что-то другое вот зесь нужно применять синхронизацию для этого лучше использовать mutex, event удобнее как только операция завершена можно посигналить следующему потоку что массив свободен уже для проверок~ops, а если не нужна последовательность операций и ничего не пишешь в массив вообще зачем зря в режим ожидания кидать потоки пускай "шалят".
Цитата Сообщение от Aneron Посмотреть сообщение
InterlockedIncrement/InterlockedDecrement
Можно и таким способом типа семафора-Дейкстры.
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
30.08.2011, 12:11 #6
Цитата Сообщение от Aneron Посмотреть сообщение
Значение переменной при опросе не меняется.
раз не меняется, то на чтение. А тут пожалуйста - ничего не надо синхронизировать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2011, 12:11
Привет! Вот еще темы с ответами:

Синхронизация потоков - C++
Есть статический класс к которому я хочу обращаться из разных потоков static class MyLog { public: static int log(std::string,...

Синхронизация процессов - C++
std::mutex позволяет синхронизировать несколько разных потоков. А есть ли в std что ни будь для синхронизации процессов? То есть, программа...

синхронизация потоков - C++
проблема в следующем: есть 2 потока один считает некоторую сумму в цикле по столбцам матрицы второй должен выводить промежуточную...

Синхронизация мьютекс - C++
Привет, на данный момент пытаюсь научиться пользоваться синхронизацией. Есть такой код: #include <iostream> #include <chrono> ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.08.2011, 12:11
Ответ Создать тему
Опции темы

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