Обмен Данными Между Потоками
От: Аноним  
Дата: 16.02.09 06:48
Оценка:
Задача: имеется ряд машин, с работающими программами. Все эти машины должны быть соединены между собой через сервер (роутер). На сервере для каждого соединения с машиной имеется свой поток. Проблема в следующем: потоки должны всё время обмениваться данными (те если клиент А (потокА) хочет отправить данные клиенту Б (потокБ), то потокА должен передать данные для отправки потокуБ), как можно осуществить сиё деяние? Обмен данными будет по всей видимости довольно интенсивный. Хотелось бы реализовать с использованием очередей сообщений, но как вот именно...

ps. linux/pthread, win32.

16.02.09 15:38: Перенесено модератором из 'C/C++' — Кодт
Re: Обмен Данными Между Потоками
От: Evil_Genius  
Дата: 16.02.09 10:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Задача: имеется ряд машин, с работающими программами. Все эти машины должны быть соединены между собой через сервер (роутер). На сервере для каждого соединения с машиной имеется свой поток. Проблема в следующем: потоки должны всё время обмениваться данными (те если клиент А (потокА) хочет отправить данные клиенту Б (потокБ), то потокА должен передать данные для отправки потокуБ), как можно осуществить сиё деяние? Обмен данными будет по всей видимости довольно интенсивный. Хотелось бы реализовать с использованием очередей сообщений, но как вот именно...


А>ps. linux/pthread, win32.


Можно для каждого потока сделать обычную stl-евскую очередь и обеспечить блокировку при чтении/записи в нее через мютексы.
Re[2]: Обмен Данными Между Потоками
От: Makht  
Дата: 17.02.09 15:46
Оценка:
Здравствуйте, Evil_Genius, Вы писали:

E_G>Можно для каждого потока сделать обычную stl-евскую очередь и обеспечить блокировку при чтении/записи в нее через мютексы.

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

PS А вообще на серверном приложении создавать отдельный поток (или пару потоков) для каждого подключения не эффективно с точки зрения быстродействия и так появляется естественное ограничения на количество подключений из-за ограничение на максимальное количество потоков для Win32 приложения.
Re: Обмен Данными Между Потоками
От: NaN_  
Дата: 19.02.09 12:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Задача: имеется ряд машин, с работающими программами. Все эти машины должны быть соединены между собой через сервер (роутер). На сервере для каждого соединения с машиной имеется свой поток. Проблема в следующем: потоки должны всё время обмениваться данными (те если клиент А (потокА) хочет отправить данные клиенту Б (потокБ), то потокА должен передать данные для отправки потокуБ), как можно осуществить сиё деяние? Обмен данными будет по всей видимости довольно интенсивный. Хотелось бы реализовать с использованием очередей сообщений, но как вот именно...


А>ps. linux/pthread, win32.


для linux/pthread можно mq_open с последующим неблокирующим чтением
или же msgget c IPC_NOWAIT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.