Я хочу использовать блокировку полной блокировки, если какой-либо поток добавляет новое значение в эту строку.Для этого я должен написать следующий код:
std::vector <omp_lock_t> ds_lock;
Я инициализирую блокировки в конструкторе
Sparse_Matrix_RL::Sparse_Matrix_RL(unsigned int row_size, unsigned int col_size)
{
row_sz = row_size;
col_sz = col_size;
omp_init_lock(&ds_lock[0]);
}
И здесь я использую его
void Sparse_Matrix_RL::addValue(unsigned int rid, unsigned int cid, double value)
{
omp_set_lock(&ds_lock[rid]);
if (value == 0)
{
omp_unset_lock(&ds_lock[rid]);
return;
}
std::map<unsigned int, double>::iterator str = data_Matrix[rid].begin();
std::map<unsigned int, double>::iterator end = data_Matrix[rid].end();
str = data_Matrix[rid].find(cid);
//while (str->first != cid && str != end) str++;
if (str != end)
str->second += value;
else
data_Matrix[rid][cid] = value;
omp_unset_lock(&ds_lock[rid]);
}
КогдаЯ запускаю код, который выдает мне ошибку:
векторный индекс вне диапазона
Теперь я не понимаю, где я ошибаюсь.