lock_guard два критических раздела с одним мьютексом - PullRequest
0 голосов
/ 03 января 2019

У меня есть методы Get() и Set(), и я хочу сделать их безопасными для потоков. Хотите знать, если я должен использовать два мьютекса, один для Get и второй для Set, или я могу использовать один мьютекс, как в коде ниже.

public:
float Get(string name){
  lock_guard<mutex> lock(mutex1);
  return value_map[name];
}

Set(string name, float value){
  lock_guard<mutex> lock(mutex1);
  value_map[name] = value;
}

private:
map<string, float> value_map;
mutex mutex1;

1 Ответ

0 голосов
/ 03 января 2019

Вы должны использовать один и тот же мьютекс для обоих. Два мьютекса были бы так же бесполезны, как и вовсе не мьютекс - у вас все равно будет гонка данных между Get и Set.

...