C Многопоточность События Deadlock's Thread - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь выполнить многопоточность на сокете в C, чтобы разработать соединитель между двумя различными программными приложениями. Я бы хотел, чтобы это работало следующим образом. Одна часть программного обеспечения будет запущена в качестве сервера, она будет выполнять различные функции, включая прослушивание подключения к сокету через назначенный порт. Это программное обеспечение будет функционировать самостоятельно и использовать данные из подключенного сетевого сокета только тогда, когда оно установлено и получает надежные данные. Так что для этой части я хотел бы иметь возможность прослушивать соединение, и когда оно сделано, форк процесс и когда данные получены из этого сокета, установите некоторую переменную, которая будет использоваться другим потоком обновления, чтобы уведомить его о том, что оно имеет эта дополнительная информация точности, которая может быть рассмотрена. С другой стороны этого уравнения я хочу создать программу, которая при загрузке будет пытаться подключиться к порту другого приложения, после этого она просто вызовет функцию, которая будет отправлять информацию не блокирующим образом. , Моя цель - создать соединитель, который позволит программистам двух других частей кода чувствовать, что они не имеют дело с сокетом, как раньше. Мне удалось установить многопоточное соединение через сокеты, но сейчас я пытаюсь изменить это так, чтобы оно было пригодно для использования, как я уже описал, и я не понимаю, как избежать множественного доступа к этой переменной, которая будет уведомлять систему на сервере сторона, что данные поступили, а также создать неблокирующее взаимодействие на стороне клиента. Любая помощь будет оценена по достоинству. -TJ

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Похоже, у вас есть двойная проблема производитель-потребитель:

Client side                  Server
producer -> sender thread -> receiver thread -> consumer thread

В этом случае наиболее полезная структура данных - блокирующая очередь с обеих сторон, как у Intel TBB concurrent_bounded_queue .

Это позволяет публиковать задачи из одного потока, а другой поток извлекает данные, когда они доступны в поточно-ориентированном режиме.

0 голосов
/ 20 марта 2012

Вопрос не так понятен для меня, но если вам нужно сделать так, чтобы разные части программного обеспечения могли легко общаться, вы можете использовать библиотеку базовых сообщений, например ZeroMQ www.zeromq.org

...