同步2个posix线程

时间:2011-03-05 13:51:48

标签: synchronization thread-safety pthreads

我有2个线程,它们都在两端都是删除内存。我的问题是,可能会发生一个线程在另一个线程开始之前开始和结束,因此它删除了由另一个线程嵌入的内存。我怎样才能使它们同步,以免发生这种情况 作为一种设计,我的线程看起来像这样:

void* thread1(void* arg)   
{
   lock(&mutex);
   counter++;
   unlock(&mutex);

   // more code here

   lock(&mutex);
   counter--;
   if(counter == 0)
   {  
      delete a;
      delete b;
    }
    unlock(&mutex);
}

另一个线程看起来是一样的,但是在thread2启动之前,这并不能阻止thread1完成 感谢。

2 个答案:

答案 0 :(得分:3)

你不能这样做:

void *thread1(void* arg)
{
   // your code

   lock(&mutex);
   counter++;
   if (counter == 2) {
      // whatever
   }
   unlock(&mutex);
}

假设在任一线程开始之前,计数器被初始化为0。

答案 1 :(得分:2)

在这里好好利用互斥体,BTW。

您可以添加另一个受同一互斥锁保护的计数器,并仅对其执行增量。然后在退出代码中,您可以检查它以确认所有线程都已启动。

即。将其更改为“if(counter == 0&& started == 2)”。

因为你正在保护柜台和开始使用互斥锁访问,如果1& 2都在完成之前开始,第一个完成将看到开始= 2和计数器= 1.另一个将看到开始= 2和计数器= 0并删除资源。

如果一个线程在另一个线程开始之前运行完成,它将看到started = 1和counter = 0.然后另一个线程将看到started = 2和counter = 0并清理。