hi there... what is the scope of locked variables? assuming that i declare a mutex in say a class scope.. and then lock it in some inner scope - say in a function.. what variables get locked? is it all the variables which are in the scope of the declaration (ie all the variables which are declared in the class)? or is it only the ones which are being used in that particular function (so that perhaps another thread could use the rest at "the same time")? for example: class Class1 { public: Class1::Class1(); ~Class1::Class1(); void f(int new) { boost::mutex::scoped_lock scoped_lock(mutex_outer) ; var1 = new; } void g(int new) { boos::mutex mutex_inner; boost::mutex::scoped_lock scoped_lock(mutex_inner) ; var1 = new; } private: boost::mutex mutex_outer; Class2 some_member_object; int var1; int var2; }; what gets locked when f() is called? when should i use g()? how do I go about just locking say var1 but NOT var2? if i lock the mutex in this class scope, does that mean that all the variables in some_member_object are locked as well? also, should i set up locks anytime i am using an object which might be accesses by another thread (even if I am just reading it) or is it enough to only lock variables when i am changing them? i know that's a lot of questions, but any help would be greatly appreciated. cheers peter