Как создать массив указателей с блокировкой и проверить указатель свободным или нет? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть массив указателей.

Могу ли я использовать mutex для блокировки и разблокировки?В то же время другой поток запускается с той же самой и проверяет матрицу [h].

int **matrix;
matrix =new int[20];
for(int i=0; i<20; i++)
{
  matrix[i]= new int[20];
}

#pragma omp parallel for nowait
for(int h=0; h< 20; ++h)
{
   if(matrix[h].isfree()==true)
   {
     lock(matrix[h]);
     //do something...
     unlock(matrix[h]);
   }
   else
   {
     //that array matrix[h] is not free. 
     skip++;
   }
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Если вы не хотите блокировать поток, достаточно использовать std::atomic_bool.В противном случае вы должны использовать std::lock_guard в сочетании с std::mutex.

0 голосов
/ 19 сентября 2019

Вы можете использовать omp_lock_t mylock; для объявления блокировки вместо pthread_mutex_t mylock;, так как вы используете openmp.Затем вы можете инициализировать блокировку и использовать omp_set_lock(&mylock);, чтобы установить блокировку, и omp_unset_lock(&mylock);, чтобы снять блокировку.Посмотрите на это -> stackoverflow.com / questions / 2396430 / как использовать lock-in-openmp

...