请教关于同步访问资源的问题?

waruqi 2008-05-20 08:31:39
我想用锁来维护某一在堆上的资源,当锁与资源具有相同生命周期时,
资源的同步由锁维护,那锁的同步由谁来维护呢? 似乎有点自相矛盾。。。。
谁能帮帮我,如何解决该资源同步问题。。。?
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;
}
}
}
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
waruqi 2008-05-21
  • 打赏
  • 举报
回复
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;
}
}
}

谁能帮我解决一下,谢谢。。。
waruqi 2008-05-20
  • 打赏
  • 举报
回复
你没明白我的意思,lock_type* lock = new lock_type();
这里的锁也是在堆上分配的,它的指针指向的内存也需要保持同步
cnzdgs 2008-05-20
  • 打赏
  • 举报
回复
由系统负责。

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧