Действительно ли мьютекс защищает только один int
? Это имеет значение - если это более сложный тип данных, вам определенно требуется блокировка.
Но если это просто int
, и вы уверены, что int
является атомарным типом (т. Е. Процессору не нужно будет делать два отдельных чтения из памяти, чтобы загрузить int в регистр), и вы Если вы оценили производительность и определили, что вам нужна более высокая производительность, то вы можете снять блокировку как с геттера, так и с сеттера. Если вы это сделаете, убедитесь, что квалифицировали int
как volatile
. И напишите комментарий, объясняющий, почему у вас нет мьютекс-защиты, и при каких условиях она вам понадобится, если класс изменится.
Кроме того, помните, что у вас нет такого кода:
void func(foo &f) {
int temp = f.count();
++temp;
f.setCount(temp);
}
Это не потокобезопасно, независимо от того, используете ли вы мьютекс или нет. Если вам нужно сделать что-то подобное, защита мьютекса должна быть вне функций сеттера / геттера.