完成端口中多线程数据读写问题
线程情况:A、B是IO完成处理线程,C是连接检查线程;
数据结构:一个客户连接socket对应一个socket_context,一次IO对应一个io_context;
有以下情景:
1、为了接收客户端的一个请求,必须发出2次WSARecv(),这两次IO请求完成后必须将收到的数据合并到一起保存到socket_context里;这2次的完成处理可能分别在A、B两个线程里执行,所以A、B线程在读写同一个socket_context时,必须处理好同步关系;这里我用InterlockedXXX()函数改变socket_context中的标记量实现。
2、当某个连接很久不发送某一种特定的数据时,C线程就会将该连接关闭,关闭时当然最好马上把socket_context清理掉;但是,C线程在做这个操作时,如果A/B正在读写socket_context就麻烦了。问题就是这里该如何处理最恰当?