There's no problem doing that from the point of view of the underlying system (for all systems I know). However, typically you would need to have completely separate file descriptors/handles. This is because the file descriptor maintains state, e.g. the current file position.
You also need to check the thread-safety of the particular C++ interface to the filesystem that you are using. This is needed in addition to the thread-safety of the underlying filesystem.
You should also consider the possibility that threaded I/O will be slower. The system may have to serialise access to the bus. You may get better performance from overlapped I/O or a dedicated I/O thread fed through a producer/consumer pipeline.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…