Why not use sf::Thread?
You can use it, but the standard library provides far more functionality (synchronization mechanisms, atomics, futures, ...). Using
std::thread also has the advantage that other developers will understand your code. But for your simple task, it doesn't matter too much, and the porting effort is very small anyway.
Now what would be a good design for that?
You could start a thread for each image, that exists only as long as an image is loaded, or have a persistent one that idles while there is no image to load. You need to transfer the loaded image to the main thread, but in this case you don't need concurrent access: As soon as the image is loaded, the loading thread doesn't need to touch it anymore. Therefore the main thread can access it without a mutex (but it needs to check a flag telling whether the loading has finished). A simple option to transport the image to the main thread is to use an output parameter
sf::Image& in the thread function, you can then bind it with
std::ref() (and
std::bind() for SFML threads).
If you have a good understanding of the C++11 threading library, you can also use the high-level operation
std::async() which returns a
std::future.