【发布时间】:2015-04-22 12:05:28
【问题描述】:
我必须开发一个简单的 C++ 命令行客户端/服务器聊天应用程序。此应用程序必须提供基本的多方两方聊天室实现。是否可以将 IO/多路复用(select() 系统调用)与 POSIX 线程结合起来? 我的意思是我想创建一个 TCP 服务器,它使用 select() 处理多个客户端,当一个客户端想要与另一个客户端聊天时,serverwr 创建一个单独的线程,它使用 IO/Multiplexing (select() syscall) 来处理通信两个客户之间。 这是一个好主意吗?不然怎么办?
【问题讨论】:
-
可以组合这些方法,但不是真正需要的,只会使事情复杂化。当您有更多连接时,通常会组合这些方法,其中您有几个线程,每个线程都处理一组连接。如果你只有几个连接,并且它们需要相互通信,我推荐多路复用的方法。
-
问题是我这样做是为了网络编程考试,并且明确要求同时使用线程和选择。
-
将
select()与线程一起使用应该没有特别的问题,除了在一个线程中关闭作为另一个选择的一部分的文件描述符会产生未定义的结果,并且在描述符之间共享的 I/O线程应该(可能,我不知道这些操作是否总是原子的)由互斥锁保护。
标签: c++ multithreading select tcp