我需要保护资源不被中断,在这种情况下写入套接字。我有一个类TelnetServer,它被多次实例化(每次使用连接一次)。
我想阻止对单个用户的写入被另一个写入同一用户的中断(即锁定互斥锁以写入该一个套接字)。但是,当我写一个用户时,我不想冻结对所有套接字的所有写入。澄清(伪c ++):
Class TelnetThread {
QMutex mutex;
void writeToSocket() {
mutex.lock();
socket->write(string);
mutex.unlock();
}
}
因此,如果我有30个TelnetThread正在运行,写入一个套接字不应该阻止同时写入另一个线程。但是,如果有几个插槽触发写入同一个套接字/线程,那么它们应该被序列化。
我应该在哪里声明我的互斥变量?如果我使它成为一个类(线程)变量,那么不会跨所有线程(此类的所有实例)序列化所有套接字写入吗?如果我在writeToSocket中使它成为函数变量,那么我认为它不会将写入序列化到同一个套接字。
帮助......我该怎么做?
答案 0 :(得分:0)
即。锁定互斥锁以写入该一个套接字
您可以编写封装的套接字写入锁定器类型,也可以只在相同的单元中将相应的互斥锁处理。
正如我在之前的一个帖子中写的那样,我会考虑使用QMutexLocker来处理这种情况。它不易出错,而且还会缩短代码。