Why not return a decorated iterator that locks them as they are returned?  Would open up the possibility to lock them lazily and leave it to the caller to toSeq them if he needs to.