отправлять сообщения TCP из двух разных потоков - PullRequest
1 голос
/ 21 декабря 2010

У меня есть два потока, которым нужно отправлять TCP-сообщения, используя то же самое уже установленное соединение.У меня есть объект, скажем, tcpSender, который я хотел бы использовать из потоков стенда.Как я могу разработать свое программное обеспечение, чтобы у меня не было проблем с параллелизмом и потерянных сообщений?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010

Вы можете смоделировать это как производитель / потребитель, где каждый поток внедряет сообщения в TCPSender, когда они готовы, а TCPSender поддерживает очередь сообщений FIFO. Вставки в очередь будут заблокированы (в пределах TCPSender) и обработаны по порядку.

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

Двумя непосредственными преимуществами является то, что вы можете поддерживать произвольное количество производителей, и блокировка ограничивается вставкой в ​​очередь, а не фактической отправкой сообщений (то есть с точки зрения производителя).

2 голосов
/ 21 декабря 2010

Вы можете создать Semaphore, который вы acquire перед каждой отправкой, и release после каждой отправки. Это обеспечит доступ к ресурсам по одному потоку за раз.

1 голос
/ 21 декабря 2010

Если вам не нужно получать ответ после отправки этих данных, вы можете использовать очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...