IoArgs并发读问题

来源:9-3 文件消息模型基础实现-1

qq_Con男_03307287

2020-08-05

		 IoArgs args = receiveIoArgs;

        IoArgs.IoArgsEventListener listener = SocketChannelAdaptor.this.receiveListener;

        listener.onStarted(args);

        try {
            //具体的读取操作
            if( args.read(channel) > 0  ){

                listener.onCompleted( args );
            }else{
                throw new IOException("cannot read any data");
            }
        }catch (Exception e){}

问题:如果多个HandleInputCallback都被异步调用 了,而他们用的是同一个IoArgs,读数据的时候会不会数据错乱呢,望老师解惑

写回答

1回答

Qiujuer

2020-08-07

IoArgs所属为一个链接,所以我们需要保证一个链接在整个生命周期中仅仅只会有一个HandleInputCallback以及HandleOutputCallback被线程调用,而不能让多个线程同时调用一个链接的HandleInputCallback。


但可以同时并发多个链接的HandleInputCallback,因为不同链接的IoArgs不同,不存在竞争与数据错乱问题。

1
1
qq_Con男_03307287
非常感谢!
2020-08-08
共1条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2314 学习 · 476 问题

查看课程