I tried your code and I got a similar result — only one of the web pages was displayed, though it was random which one. I'm not sure precisely why, but it looks like the "open" method merely queues a request for its URL to be delivered (to Safari in this case, since it's http), and that request isn't handled until the run loop of your main thread has a chance to run. That's why "sleep(5)" doesn't help, since the thread doesn't cycle the run loop while it's sleeping.
However, I think it's a bit more complicated than that. It looks like there's contention when those requests arrive, too. From what I could tell, the requets are processes sequentially on arrival, too, and a new request (while the current one is still loading its web page, or waiting to load) is discarded, and this happens in a single Safari tab, so that there's still only one "winner".
So, the question becomes, what are you really trying to do. If you're trying to get the effect of some kind of web page "slide show", this doesn't seem like the way to do it. It might be better to use WebKit (WKWebView) to display multiple web views in-app.