1

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

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

Class TelnetThread {
  QMutex mutex;

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

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

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

帮助...我该怎么做?

4

1 回答 1

0

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

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

正如我在您之前的一个线程中所写,我会考虑在这种情况下使用 QMutexLocker。它不易出错,并且还使代码更短。

于 2013-10-03T11:17:09.057 回答