Можно ли использовать мьютекс для частей класса?
Вы не используете мьютекс на ничего. Мьютекс - это то, что ваши потоки могут «блокировать» и «разблокировать», и он не позволит нескольким потокам заблокировать его одновременно. Это все . Мьютекс не знает , почему ваши потоки блокируют его. Мьютекс не знает и не заботится о том, какие объекты или данные ваш код ассоциирует с ним.
class A{
int a;
int b;
boost::mutex Mutex_for_a;
boost::mutex Mutex_for_b;
}
Это может иметь смысл, а может и нет. Невозможно сказать, не увидев, как ваши потоки используют a
и b
. Основная причина использования мьютекса заключается в том, чтобы другие потоки не могли увидеть некоторую коллекцию данных в несогласованном или недопустимом состоянии, пока какой-то другой поток находится в процессе ее изменения.
Если «коллекция данных», которую вы хотите защитить, содержится в одной переменной int
, возможно, имеет смысл поделиться ею, сделав ее std::atomic<int>
, и забудьте о мьютексе.
С другой стороны, если есть важные отношения между a
и b
, то вам следует использовать single mutex для защиты этих отношений.