请在在主线程中有个TClientSocket,使用的是非阻塞模式工作。在ClientSocketRead事件中,获得服务器发来的数据,
解析并保存在队列中。另外一个线程处理队列中的数据。处理完后,需要用Socket->SendBuf方法发送(写)数据到服务端。
请问各位,在这两个线程中主线程读(接收),另外子写(发送)。这样操作,需不需要加个 临界区之类的锁。把Socket操作
时,要分别锁起来? 谢谢。
官方文档里有句话:
Use a non-blocking socket when the socket needs to synchronize reading and writing with server sockets.
不知道如何正确理解?
------解决方案--------------------
非阻塞情况下这个必须要枷锁,因为你接受线程和发送线程是对同一个队列里的数据进行处理,存在资源竞争,需要枷锁进行保护,防止队列中的数据被改写
------解决方案--------------------
------解决方案--------------------
这个帖子时间这么长了。这个在阻塞模式是,不用加锁。只是要自己处理接收和发送的数据,由于是一对多,所以都是用多线程,就是每个客户端连接对应一个服务端的处理线程。具体
- C/C++ code
void __fastcall TServerFrm::ServerSocket1GetThread(TObject *Sender, TServerClientWinSocket *ClientSocket, TServerClientThread *&SocketThread) { SocketThread=new MyServer(false,ClientSocket,600000); }