To answer the specific question: Because your threads spend more time trying to obtain a lock and wait on condition variables than they are doing actual work. Multithreading isn't a free get more power scheme, if you have to constantly acquire highly contended locks you will get a severe overhead penalty for this. The more threads you have, the more they fight over the locks and spend blocked while one other thread holds the lock.
To combat this: Try to only synchronize data when you have to. Queue up a lot of changes, and/or do more work at once to actually leverage the threads time on the CPU. When you synchronize, try to only hold the lock for the shortest absolute necessary time.
Last but not least: More threads may not always be better. If you have multiple threads crunching on a queue of jobs, it's often better to only spin up as many threads as there are logical CPU cores so the threads don't have to fight over the single cores. As with everything though, proper profiling will tell you where the problems are.