【发布时间】:2013-10-03 08:18:27
【问题描述】:
我需要保护资源不被中断,在这种情况下写入套接字。我有一个类 TelnetServer,它被实例化了很多次(每个使用的连接一次)。
我想防止对单个用户的写入被另一个对同一用户的写入中断(即锁定互斥锁以写入该一个套接字)。但是,我不想在写入单个用户时冻结对所有套接字的所有写入。澄清(伪c++):
Class TelnetThread {
QMutex mutex;
void writeToSocket() {
mutex.lock();
socket->write(string);
mutex.unlock();
}
}
所以如果我有 30 个 TelnetThread 正在运行,写入一个套接字不应阻止同时写入另一个线程。但是,如果几个槽触发写入同一个套接字/线程,那么它们应该被序列化。
我应该在哪里声明我的互斥变量?如果我将其设为类(线程)变量,那不会序列化所有线程(此类的所有实例)上的所有套接字写入吗?如果我将其设为 writeToSocket 中的函数变量,那么我认为它甚至不会将写入序列化到同一个套接字。
帮助...我该怎么做?
【问题讨论】:
-
你应该在与套接字成员相同的范围内声明你的互斥锁。
-
如果您希望每个套接字有一个互斥锁,请与每个套接字配对一个
-
我不明白怎么做。根据我的阅读,如果我在类级别声明一个套接字变量,在类级别声明一个互斥锁,那么(该类的)所有线程共享同一个互斥锁,这不是我想要的。