Как определить карту энергозависимых элементов в cpp

Я хочу создать карту элементов мьютекса, которые, вероятно, должны быть нестабильными.
Я пытаюсь определить что-то вроде этого:

typedef std::map<int key, volatile long mutex> tMutexMap;
tMutexMap myMutexMap;

и затем используйте простой индекс карты, например:

myMutexMap[10]=0;
myMutexMap[23]=1;

Я использую gcc 4.1.2. Компилятору gcc этот код не нравится. Я получаю ошибку

нет подходящей функции для вызова ‘std :: pair ….’ «

Что я делаю неправильно?

5

Решение

Я не уверен, что вы можете сделать изменчивый элемент на карте. Вы можете сделать изменчивую карту, но не значение в карте.
Карта реализована в виде двоичного дерева. И есть сложный алгоритм, чтобы получить значение из этого дерева. Volatile сказал компилятору, что он не должен оптимизировать доступ к этой переменной. Вы можете использовать volatile, когда у вас есть прямой доступ к переменной. Но на карте у вас нет такого прямого доступа.

1

Другие решения

C / C ++ ‘s volatile не похоже volatile в некоторых управляемых языках и не имеет ничего общего с мьютексами (см. http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484). В зависимости от того, чего вы хотите достичь, рассмотрите возможность использования std::mutex (или же boost::mutex если у вас есть стандартная библиотека до C ++ 11) или std::atomic<YourPreferredIntergalType>

5

Почему ценности должны быть volatile? Влияние volatile не имеет ничего общего с потоками.

Тем не менее, проблема может заключаться только в конструкторе defaukt, который неявно используется при использовании оператора подписки te (вы, к сожалению, обрезали сообщение об ошибке, так что трудно сказать). Попробуйте вставить готовые пары соответствующего типа. Для поиска вам нужно использовать find() Участник карты.

0
По вопросам рекламы [email protected]