Мне нужно защитить ресурс от прерывания, в данном случае записи в сокет. У меня есть класс TelnetServer, экземпляр которого создается много раз (один раз для каждого используемого соединения).
Я хочу, чтобы запись для одного пользователя не прерывалась другой записью для того же пользователя (т.е. блокировка мьютекса для записи в этот сокет). Но я не хочу замораживать ВСЕ записи во все сокеты, пока я пишу одному пользователю. Чтобы уточнить (псевдо С++):
Class TelnetThread {
QMutex mutex;
void writeToSocket() {
mutex.lock();
socket->write(string);
mutex.unlock();
}
}
Поэтому, если у меня работает 30 TelnetThread, запись в один сокет НЕ должна препятствовать одновременной записи в другой поток. Но если пара слотов запускает запись в один и тот же сокет/поток, то их следует сериализовать.
Где я должен объявить переменную мьютекса? Если я сделаю это переменной класса (потока), не будет ли это сериализовать все записи сокетов во всех потоках (всех экземплярах этого класса)? Если я сделаю это функциональной переменной внутри writeToSocket, то я не думаю, что она будет сериализовать записи даже в один и тот же сокет.
Помогите... как мне это сделать?