One of the problems with D3D on a PC is losing a device. This can happen when someone changes resolution or when the stars become misalligned. When this happens you have to release all your textures, reset the device and reload your textures. When this becomes trickier is when you start throwing multiple threads into the mix. What I found out in the early work on my engine is that you need to use the same thread that creates the textures to release the textures. Depending on how you have your threads working this can actually be a bit tricky. Having a resource manager running on it's own thread solves this problem. Since it handles all loading and releasing of textures you always have the same thread doing that work. Good stuff.
Of course life isn't always simple. My scene objects now have to ask the resource manager to load something. This is done by sending a message to the manager. Not wanting to create any blocks on my threads I made this an asyncronous action. So the scene makes the request and then just goes on it's merry way doing whatever other work it wants. When the resource manager is done loading things it sends a message back to the scene along with a pointer to the new texture object. Add a message handling function to the scene and everything is working. Next step is handling the loading of audio resources this way as well.