Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++, thread, нужен совет по работе с переменными  (Прочитано 268 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Есть программа, в программе 5 глобальный объектов(переменных), выполняется парсинг конфига, после этого запускает два потока (thread) и я делаю detach(). Первый поток, сокет-сервер, расчитан на работу с программными клиентами, второй поток, сокет-сервер, работает с proximity считывателями. После получения данных оба сокета делают предварительную обработку данных и вызывают функцию data_processing() и тут у меня начинается проблемы, так как с потоками ещё не работал в этом направлении.
У каждого потока значения этих глобальных объектов свои, а мне нужно чтобы эти значения были общими для двух потоков и соответственно если один поток меняет их, то второй должен это видеть.

Направьте, пожалуйста, меня в нужную сторону. Что читать, где искать, буду ОЧЕНЬ благодарен за пример.
Заранее благодарю!!

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 716
    • Просмотр профиля
Показывай код, хотя бы примерный. Глобальные объекты одинаковы для всех потоков.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Там много кода)) Т.е. по идее если он глобальный, то у меня не должно быть проблем с значениями этих объектов? Попробую выдрать код из контекста.

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 716
    • Просмотр профиля
Напиши простой пример с одной глобальной переменной и двумя потоками - один изменяет этот объект раз в секунду, другой печатает.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Капец! Как хорошо иногда поговорить с умными людьми! Сделал пример, по вашему совету, все супер. Начал смотреть свой код, чтобы понять где я накосячил и нашёл! Я совсем забыл, что сокет-сервер который работает с proximity считывателями -  многопользовательский и работает через fork(). Понятное дело, у форка уже свои значения. Теперь нужно переделать сервер на многопользовательский но без fork(), новая задача ))

Подскажите еще, если не сложно, как лучше защищать глобальные объекты от одновременной работы с ними потоков? В теории потоки не будут одновременно работать с этими объектами, но как я понимаю это рукожопство полагаться на теорию)))

Спасибо вам за совет!

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14927
  • Я не слышу.
    • Просмотр профиля
mutex - что-бы не было черепаху в thread переход.

~.o

 

Страница сгенерирована за 0.061 секунд. Запросов: 24.