经过几个月的评估、重新评估和规划不同的数据结构和web/应用程序服务器,我现在需要在实现细节上大做文章。(目前理论上)我面临的问题是:
假设我正在使用GWANs KV存储为用户等存储C结构(工作良好,经过测试),我应该如何从KV中删除这些对象,然后从内存中删除这些对象,而不遇到竞争条件?
我现在就是这样的:
线程A:
线程B:
或者其他可能发生的事情:
线程B:
或
线程B:
除了使用锁外,有没有办法避免这种情况?我找到了描述处理不同生产者/消费者情况的算法的文档,哈希表,.即使有时使用免费等待实现(我还没有找到一个很好的例子来向我展示无锁和无等待之间的区别,尽管我从概念上理解了这一点),但我还没有找到如何处理这类事情的方法。
我是不是想得过头了,还是有一种简单的方法来避免这些情况?我可以任意更改数据和-storage布局,我可以自由地使用处理器特定的指令(例如CAS)。
提前感谢
发布于 2013-07-04 11:41:36
这里有几个问题:
删除GWAN KV存储的结构
在从持久化指针中删除KV或释放KV时,必须确保没有人取消对已释放的数据的引用。
这与应用程序有关。您可以通过使用G内存池引入一些容忍度,这将使数据在KV删除后存活下来,只要内存不被过度占用(或释放池)。
删除GWAN KV密钥-值对
G的KV存储进行簿记(使用原子本质)来保护线程获取的值,并在请求被处理后解除它们的保护。
如果需要将数据保存更长时间,请复制一份。
其他存储工具,如内存中的SQLite使用锁.在这种情况下,锁粒度是非常重要的。
https://stackoverflow.com/questions/17453614
复制相似问题