与本地对象同步
synchronized with local object
我刚刚阅读了一些代码,并注意到有一些代码同步了一个本地对象。有人可以告诉我当我们这样做时这意味着什么,因为我们只是创建了一个新的本地对象,我们为什么要锁定它?
list queue;
...
public send()
{
entry = waitEntry();
//add this object into the list
queue.add(entry);
...
synchronized( entry )
{
//do some sth
entry.wait();
}
}
然后,当我们收到响应时,解锁此对象
public receive()
{
entry = list.get() <-- get the object we have sent before
synchronized( entry )
{
entry.notify()
}
}
如您所见,我之前已经锁定了"条目",如何在 receive() 方法中再次锁定它?
谢谢大家。
如果您有多个正在运行的线程将访问相同的资源,则可能会遇到一些并发问题,在您的示例中,第一个线程会将条目添加到队列中,然后该线程必须等待其他代码影响他对此资源的操作。由于两个线程同时执行,因此 receive 方法可能会读取处于错误状态的条目 ressource(在 send 方法对 ressource 执行之前)。
这就是我的理解,我可能是错的。如果你想了解更多关于这类问题的信息,你应该阅读关于并发的文章
相关文章:
- 同步对象
- 从多个线程对共享对象的同步方法调用
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 我们是否需要在C++中同步局部对象变量
- 如何使Windows ListView控件和它们映射到的对象保持同步
- 与本地对象同步
- 如何安全地将包含的对象(菜单项)与需要容器(菜单)的API同步
- 通过使用覆盖操作员的代理来同步对象
- 静态对象的同步
- 同步线程创建和销毁(静态)对象
- RAII 是否可以在不同步的情况下有效地在线程之间共享不可变对象
- 同步对象以等待而不阻止C++中的 UI(C++生成器)
- 此同步对象实现线程是否安全
- C++(可能还有 Java)如何锁定对象以进行同步
- 在同一进程中使用的两个模块中具有同步对象的通用名称是否安全
- 如何在C++或Winapi中转移同步对象的所有权
- 如何制作同步对象的字典
- 使用MFC同步对象的缺陷
- 同步对象是否可缓存?
- C++同步对象-InitializeConditionVariable失败