c # асинхронный сокет доступ к нескольким потокам - PullRequest
2 голосов
/ 05 декабря 2010

Я хотел бы использовать модель асинхронного ввода-вывода C # для моего сокета.У меня есть несколько потоков, которые нужно отправить через сокет.Каков наилучший способ справиться с этим?Пул N розеток с доступом, контролируемым замком?Или асинхронная отправка безопасна для потоков, когда несколько потоков получают доступ к одному сокету?

Ответы [ 2 ]

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

Асинхронные методы уже создают новые потоки для отправки данных. Это, вероятно, добавит ненужные накладные расходы на ваше приложение. Если у вас уже есть несколько потоков, вы можете создать объект типа IDispoable для представления доступа к сокету и диспетчера, который будет контролировать возврат и извлечение сокета. Сокет будет регистрироваться при вызове метода удаления IDisposable. Таким образом, вы можете контролировать, какие методы могут выполнять ваши потоки в сокете. Если сокет уже извлечен другим потоком, менеджер просто заблокирует его, пока он не станет доступным.

using (SharedSocket socket = SocketManager.GetSocket())
{
    //do things with socket
}
1 голос
/ 05 декабря 2010

System.Threading.Semaphore - это то, что становится удобным в условиях синхронизации и гонок

...