The short answer: Don't
The explanation: OpenGL isn't actually multi-thread capable, so all the commands you issue, essentially end up in the same command queue and thus there's generally little to gain from doing things in a separate thread.
Additionally, you need to have an active context per thread, which means you'd have to create a new context, which by itself can be rather expensive.
For SFML 2 your code is additionally problematic, as you use a non-stable container (i.e. vector) to store textures, so when you add a new texture, what can happen is that all the textures need to be moved somewhere else, which is done through a copy (as SFML 2 has no move semantics), which means the texture data is downloade from VRAM to RAM and then uploaded again to VRAM, thus very expensive.
It's also recommended to use as few textures as possible to prevent texture swapping and when possible to just use different sections of the same texture instead. As such it's questionable to split the different renderings into multiple texture instances, which btw. is again a texture copy (VRAM -> RAM -> VRAM).
My suggestion would be to render everything to one large RenderTexture and then store a list of texture rects that tell you which sections of the large texture you should use and doing everything in the main loop.
I don't know the rest of your program, but this should be fast enough.
The error message itself sounds rather odd. Maybe you're not properly protecting shared resources, thus running into some undefined behavior?