2012-02-19 67 views
1

我正在使用具有联机数据存储(GAE)和脱机数据存储(HTML5 websql)的应用程序。所以要解决同步问题,我试图实现一个锁定机制。它应该像信号量一样工作,或者作为主从机制工作。用户可以获得锁,如果不可用,可以请求锁。 (虽然饥饿是可能的,但它是由用户策略处理的)GAE上的锁定机制

那么在App Engine中是否提供了任何实现此锁定机制的功能。

在此先感谢...

回答

2

有在GAE Datastore的锁定没有明确的机制。

然而,数据存储支持事务,所以你可以创建(例如)SyncLock实体和属性locked设置为true事务内。

请注意,创建SyncLock未被事务覆盖,但更新现有的是。所以不同的会话应该尝试访问同一个SyncLock实体,并且只有在实体具有相同ID的情况下才能实现。所以你应该使用userID作为ID为SyncLock

+0

此答案不起作用,因为AppEngine数据存储最终是一致的。 因此,线程1启动一个事务,将SyncLock设置为true,并且线程2进入,并且仍然不会获取SyncLock为true的数据视图。 – 2014-12-06 05:18:18

+0

@Aaron,请看第二个例子 - 自动创建一个实体:https://cloud.google.com/appengine/docs/java/datastore/transactions#Java_Uses_​​for_transactions – 2014-12-06 16:41:19

+0

因此,如果OP在“事务检查”中创建同步实体如果存在,然后创建“时尚,那么他可以肯定没有碰撞。 – 2014-12-06 16:47:00