在多线程程序中,使用锁来保证资源的有序访问,即一个操作不会导致另一个正在进行的操作无效。举个例子,一个操作正在遍历一个list,而另一个操作却把这个list clear掉了,导致迭代器失效。
然而这个问题并不仅仅是多线程才需要考虑的问题。举个例子,当一个操作在遍历list,针对每个元素进行某一个调用,而这个调用破坏了list的结构,那么当它访问时,迭代器也就失效了。继续使用迭代器就会出现错误。
仔细的编程保证操作的顺序正确并不能解决问题。可能元素的处理的调用将利用客户端写的代码,而这些代码如果可能对你正在处理的资源造成影响,那么就是危险的。
像这种调用链上发生的错误并不能通过锁来解决,它不属于线程同步范围。
简单的处理方法是调用返回的时候进行检查,确认迭代器是否有效。设置标志位会起到作用,因为不是并发的场景。