Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обмен данными между потоками 
:(
    Опции темы
loginrl103
Дата 16.2.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



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

ps. linux/pthread/C.

Это сообщение отредактировал(а) loginrl103 - 16.2.2009, 13:30
PM MAIL   Вверх
MAKCim
Дата 16.2.2009, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(loginrl103 @  16.2.2009,  13:28 Найти цитируемый пост)
но как вот именно

обычный per-thread список, защищенный спин-блокировкой


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
loginrl103
Дата 16.2.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



можно поконкретнее? код для примера?
PM MAIL   Вверх
MAKCim
Дата 16.2.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Код

static __thread
{
    struct list_head list;
    atomic_t lock;
} queue = {
    .list = LIST_HEAD_INIT(&queue.list), 
    .lock = UNLOCK(&queue.lock)
};

struct message
{
    struct list_head entry;
// other message fields
};

int add_thread_message(struct message *msg)
{
    LOCK(&queue.lock);
    list_add_tail(&msg->entry, &queue.list);
    UNLOCK(&queue.lock);
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 17.2.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Рекомендую msgget(2). А еще лучше шаровая память shmget(2) плюс семафор(ы) semget(2). Еще можно простую трубу (pipe(2)) + select. Вариантов, как видите. немеряно. Какой наиболее интересен (объясню подробнее) ? 

Это сообщение отредактировал(а) GrayCardinal - 17.2.2009, 16:50


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 17.2.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  17.2.2009,  16:48 Найти цитируемый пост)
Рекомендую msgget(2). А еще лучше шаровая память shmget(2) плюс семафор(ы) semget(2). Еще можно простую трубу (pipe(2)) + select.

зачем?
это жутко не эффективно ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 17.2.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
Не скажи...  smile 


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 17.2.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  17.2.2009,  17:59 Найти цитируемый пост)
Не скажи... 

более того, я не просто говорю, я утверждаю  smile 
жду аргументов  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 17.2.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
ты утверждаешь, с тебя и тесты smile 
У нас просто понятия скорости разные - вот писать на питоне, вот это действительно МЕДЛЕННО.


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 17.2.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  17.2.2009,  18:21 Найти цитируемый пост)
У нас просто понятия скорости разные

я к тому, зачем использовать ядро как буфер IPC для _потоков_?  smile 
знаешь сколько в ядре будет выполняться ненужных действий? (применительно к этой задаче)

Добавлено через 2 минуты и 44 секунды
Цитата(GrayCardinal @  17.2.2009,  18:21 Найти цитируемый пост)
вот писать на питоне, вот это действительно МЕДЛЕННО

один фиг как API вызывается


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 18.2.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
ОК. Но труба-то тебе чем не угодила ?  smile 


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 18.2.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  18.2.2009,  09:51 Найти цитируемый пост)
Но труба-то тебе чем не угодила ?

хм
а что, pipe не использует буфер в ядре (как и любой другой ядерный IPC)?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 18.2.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim
 smile 


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.