我想用锁来维护某一在堆上的资源,当锁与资源具有相同生命周期时,
资源的同步由锁维护,那锁的同步由谁来维护呢? 似乎有点自相矛盾。
谁能帮帮我,如何解决该资源同步问题?
eg:lock_type* lock;
resource_type* resource;... ...void func()
{
if(NULL != lock)
{
// 若执行到此处,切换到另一线程并且把锁释放了,崩溃
lock->Lock();
if(NULL != resource)
{
use(resource);
delete resource;
resource = NULL;
}
lock->UnLock(); if(NULL == resource)
{
delete lock;
lock = NULL;
}
}
}

解决方案 »

  1.   

    你没明白我的意思,lock_type* lock = new lock_type();
    这里的锁也是在堆上分配的,它的指针指向的内存也需要保持同步
      

  2.   

    void func()
    {
        if(NULL != lock)
        {
            // 线程1:若执行到此处,切换到 线程2 并且把锁销毁了,崩溃
            lock->Lock();
            if(NULL != resource)
            {
                use(resource);
                delete resource;
                resource = NULL;
            }
            lock->UnLock();        if(NULL == resource)
            {
                delete lock; // 线程2:销毁锁,此时 线程1 执行lock->Lock()时不就崩溃了吗?
                lock = NULL;
            }
        }
    }谁能帮我解决一下,谢谢