QMutex - 在线程内保护但不跨线程保护

时间:2013-10-03 08:18:28

标签: qt qtcore qmutex

我需要保护资源不被中断,在这种情况下写入套接字。我有一个类TelnetServer,它被多次实例化(每次使用连接一次)。

我想阻止对单个用户的写入被另一个写入同一用户的中断(即锁定互斥锁以写入该一个套接字)。但是,当我写一个用户时,我不想冻结对所有套接字的所有写入。澄清(伪c ++):

Class TelnetThread {
  QMutex mutex;

  void writeToSocket() {
      mutex.lock();
      socket->write(string);
      mutex.unlock();
  }
}

因此,如果我有30个TelnetThread正在运行,写入一个套接字不应该阻止同时写入另一个线程。但是,如果有几个插槽触发写入同一个套接字/线程,那么它们应该被序列化。

我应该在哪里声明我的互斥变量?如果我使它成为一个类(线程)变量,那么不会跨所有线程(此类的所有实例)序列化所有套接字写入吗?如果我在writeToSocket中使它成为函数变量,那么我认为它不会将写入序列化到同一个套接字。

帮助......我该怎么做?

1 个答案:

答案 0 :(得分:0)

  

即。锁定互斥锁以写入该一个套接字

您可以编写封装的套接字写入锁定器类型,也可以只在相同的单元中将相应的互斥锁处理。

正如我在之前的一个帖子中写的那样,我会考虑使用QMutexLocker来处理这种情况。它不易出错,而且还会缩短代码。