Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как организовать потокобезопасную очередь в многопоточной программе под Windows
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
zem32 zem32 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.11.2010
По умолчанию Как организовать потокобезопасную очередь в многопоточной программе под Windows - 30.11.2010, 16:49

Хочу спросить у более опытных товарищей,
как организовать потокобезопасную очередь в многопоточной программе под виндой?
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 30.11.2010, 18:16

Опиши более подробно основные операции над очередью - помещение в очередь (push_tail), чтение из очереди (peek_head), извлечение из очереди (pop_head).
Какой модели соответствуют основные операции: "один писатель - много читателей", "много писателей - один читатель" или "много писателей - много читателей"?
А так, в принципе, дело несложное - просто вводишь в (класс) очереди примитив синхронизации (под Win - например, критическую секцию) и синхронизируешь все операции на нем.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#3 (permalink)) Старый
zem32 zem32 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.11.2010
По умолчанию 01.12.2010, 12:39

Подробнее задача будет выглядеть так:
Многопоточное приложение использует DLL-библиотеку загруженную в отдельный поток (приложение - ехе-шник и изменению не подлежит). Остальные потоки приложения будут записывать в очередь данные. Dll будет принимать из потока данные и отправлять на SQL-сервер. Это первая часть задачи.
Будет и вторая часть в которой по инициативе множества потоков данные через ту же или другую DLL будут считываться с SQL-сервера. Как это будет реализовано - пока не знаю.
Я думаю, связь DLL-SQL-сервер лучше сделать однопоточную, с подключением к SQL-серверу при загрузке DLL и отключением при выгрузке, наверно так будет работать быстрее. Интенсивность запросов на запись и чтение может быть высокой, что ведет к коллизиям.
Ответить с цитированием
  (#4 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 03.12.2010, 11:33

По первой части у тебя получается классическая схема "много писателей - один читатель". Если твоя очередь односвязная, то помещение в очередь и извлечение из очереди, вероятно, стоит выполнять в Win функциями вида InterlockedExchangePointers(...) - посмотри в MSDN набор Interlocked-функций, они предпочтительны тем, что не влекут накладных расходов на блокировку.

Что касается второй части, то пока тут не понятна сама логика работы.... поэтому советов пока дать не могу. Попробуй продумать саму логику/алгоритмику, а реализация - это уже значительно проще.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в Windows 7 организовать дистанционное управление между Буками? Wanderlife Windows 7 3 13.01.2012 06:35
Очередь...... zapiska Вопросы начинающих программистов 1 28.11.2011 08:37
Пропадает очередь печати Фредерик Принтеры 2 05.05.2011 00:44
Реализация кодов ошибок для утилиты в многопоточной среде vilru С/С++ 8 18.06.2009 09:04
Как реализовать очередь aleksandrfnsv1 Delphi 2 07.04.2008 11:34
Очередь с приоритетами FIFO serg_grem C++ Builder 0 03.11.2007 17:09
Как в программе организовать pField, если работать с DAO в VC++6.0 BD Visual C++ 0 20.09.2006 17:43
В программе небходимо сделать нечто похожее на Диспетчер задач Windows andrey_pst Delphi 3 23.11.2004 14:06
Очередь сообщений в Win32 Omen WinAPI 1 20.09.2004 12:21
Как в программе удалить гавканье Windows Vanish C++ Builder 2 17.05.2004 12:18
Как организовать мышинные жесты в программе ORION Delphi 4 18.12.2003 22:55
Поиск по реестру Windows как организовать Anonymous Delphi 0 15.12.2003 18:50



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов