我有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完成 感谢。
答案 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并清理。