here is the call stack:
> msvcr90d.dll!_NMSG_WRITE(int rterrnum=10) Line 198 C
msvcr90d.dll!abort() Line 59 + 0x7 bytes C
msvcr90d.dll!terminate() Line 130 C++
...
Parallel.exe!std::unique_lock<std::mutex>::unique_lock<std::mutex>(std::mutex & m_={...}) Line 261 C++
Parallel.exe!CLock::CLock(std::mutex & _m={...}) Line 19 + 0xf bytes C++
The fact that the code is stopped in terminate implies that stack trace function used by the deadlock detection hit an unrecoverable internal error. Why that would happen is currently beyond me. I will have to investigate further. Thank you for reporting this.
What version of Windows are you running? Which edition of MSVC (express, standard, team system ...)?
The later part of the stack trace doesn't seem to match the source code you've pasted. Did you try using something other than lock_guard (e.g. unique_lock as posted?) It doesn't matter; just trying to identify the discrepancy.
Thanks.