I don't think I fully understand the question, but if you have any data that is accessed by more than one thread, then this access has to be protected against concurrency. Easiest way to do that is using QMutex.
Not sure why you bring QSemaphore up, though, hence my guess that I don't understand what your actual problem is.
Cheers,
_
Bookmarks