1、Bug描述
使用boost串口编程,main方法调用异步read,传入回调方法,运行程序,出现 “串口读取位置...时发生访问冲突”。而在main方法中,使用串行,
while(true){read, write ,} 不会报错。
2、最后问题,终于找到了。使用同步方法,main方法不会退出,而使用异步方法,main方法退出,这个时候再去执行 回调方法的时候,当然会报错,main方法都退出了。
3、解决办法:使用异步方法的时候,main方法使用while(true){sleep;} 紧接思考,如果main方法不再做其他事,直接使用同步方法就好了。因为异步方法的使用场景是:去让别人做一件事(别人做完后,回调自己去做某件事),不阻塞自己做其他的事情。如果自己不做其他事,不需要使用异步方法。
4、异步方法相当于,重启了一个线程去做某件事,做完之后,调用回调方法。回调方法在主线程上同步执行,而不是在异步方法创建的线程上。