【问题标题】:How to create an array of pointers with lock and check the pointer free or not?如何创建一个带锁的指针数组并检查指针是否空闲?
【发布时间】:2019-09-19 08:37:09
【问题描述】:

我有一个数组指针。

我可以使用互斥锁进行锁定和解锁吗?同时,另一个线程以相同的方式运行并检查matrix[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++;
   }
}

【问题讨论】:

  • 您必须提供更多关于“做某事”的信息,否则我们实际上无法正确回答问题! matrix[h].isfree() 对于int* 也没有任何意义。请创建minimal reproducible example,当前的答案可能会误导您。

标签: c++ multithreading parallel-processing openmp


【解决方案1】:

如果您的意图是从不阻塞线程,则使用 std::atomic_bool 就足够了。 否则,您应该将std::lock_guardstd::mutex 结合使用。

【讨论】:

    【解决方案2】:

    您可以使用omp_lock_t mylock; 来声明锁,而不是使用openmp 时的pthread_mutex_t mylock;。然后您可以初始化锁并使用omp_set_lock(&amp;mylock); 放置锁并使用omp_unset_lock(&amp;mylock); 移除锁。看看这个-> stackoverflow.com/questions/2396430/how-to-use-lock-in-openmp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2016-04-01
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多