with multiple storage engines, the question is does this make sense. i think 2 yrs ago when posted i was thinking of reading from the non-private mmap.
however, the general notion could still make sense. we could say "build index x" to storage engine whatever; it then says "inprog" and we then keep allowing reads (only – otherwise it turns into bg indexing complexity). that is to say, any storage engine probably could in theory be making an index and everything else is still readable, as it is unlikely anything else mutates during that operation until it is done.
we could give engine option to return "inprog" vs blocking until done or something and leave it up to the implementor?
i suppose with enough concurrency the issue (at least with the serialness described above) goes away. but it is pretty typical for storage engines to block a collection C (only) when you make an index on C. (some don't but many/most do)