首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止在删除GWAN KV存储的结构时出现争用状态?

如何防止在删除GWAN KV存储的结构时出现争用状态?
EN

Stack Overflow用户
提问于 2013-07-03 16:41:05
回答 1查看 250关注 0票数 0

经过几个月的评估、重新评估和规划不同的数据结构和web/应用程序服务器,我现在需要在实现细节上大做文章。(目前理论上)我面临的问题是:

假设我正在使用GWANs KV存储为用户等存储C结构(工作良好,经过测试),我应该如何从KV中删除这些对象,然后从内存中删除这些对象,而不遇到竞争条件?

我现在就是这样的:

线程A:

  • 获取引用要删除的对象的其他对象
  • 将引用设置为NULL
  • 删除对象

线程B:

  • 尝试获取对象-> kv可以返回对象,因为它还没有被删除
  • 尝试使用->已经删除的对象做一些事情,这样我就可以访问已经释放的内存了吗?

或者其他可能发生的事情:

线程B:

  • 获取事物引用对象
  • 跟随引用->对象在这里可能不会被删除
  • 使用引用做一些事情->对象在这里可能会被删除,->问题

线程B:

  • 获取其他可以引用要删除对象的对象。
  • 尚未删除的抓取对象
  • 对对象->对象的设置引用可能会在此处删除->问题

除了使用锁外,有没有办法避免这种情况?我找到了描述处理不同生产者/消费者情况的算法的文档,哈希表,.即使有时使用免费等待实现(我还没有找到一个很好的例子来向我展示无锁和无等待之间的区别,尽管我从概念上理解了这一点),但我还没有找到如何处理这类事情的方法。

我是不是想得过头了,还是有一种简单的方法来避免这些情况?我可以任意更改数据和-storage布局,我可以自由地使用处理器特定的指令(例如CAS)。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-04 11:41:36

这里有几个问题:

删除GWAN KV存储的结构

在从持久化指针中删除KV或释放KV时,必须确保没有人取消对已释放的数据的引用。

这与应用程序有关。您可以通过使用G内存池引入一些容忍度,这将使数据在KV删除后存活下来,只要内存不被过度占用(或释放池)。

删除GWAN KV密钥-值对

G的KV存储进行簿记(使用原子本质)来保护线程获取的值,并在请求被处理后解除它们的保护。

如果需要将数据保存更长时间,请复制一份。

其他存储工具,如内存中的SQLite使用锁.在这种情况下,锁粒度是非常重要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17453614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档