Jasně, a přístup ke dvěma takovým proměnným ti rozhodně nikdy nezpůsobí deadlock...
Pokud tu třídu neuděláš blbě, tak ti to deadlock nezpůsobí. Když ji uděláš blbě, tak samozřejmě deadlock vyrobit můžeš. I když deadlock s jedním mutexem, to už musí být vyšší dívčí, aby se to povedlo.
Nicméně ty pořád operuješ deadlocky s mutexy, jo to se může stát, ale když nechci, nemusím mutexy v C++ vůbec používat. Mám k dispozici úplně stejná sychronizační primitiva jako v Haskellu (atomické proměnné, shared memory, mutexy, thread specific variables, STM...). Je jenom na mně, co použiju. A že si můžu nabít čumák, když něco použitju blbě? Ano můžu.
Ne, můj kód čeká požadovaný timeout, zda-li se v té době podmínka nesplní. Tvůj ne. Tohle přes zámky neuděláš, na to potřebuješ condition variable... se 2ma proměnnýma. Lahůdka.
Jo tohle, to je C++ taky triviální, normální mutex:
http://en.cppreference.com/w/cpp/thread/timed_mutex