Parse计数器是多线程的吗?

时间:2015-05-08 01:28:16

标签: ios multithreading parse-platform increment decrement

我正在创建一个应用程序,它会根据用户的响应将值递增/递减1或2。如果多个用户尝试同时更改该值,它是否可以正常工作?我的示例代码是:

PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
[gameScore setObject:[NSNumber numberWithInt:1337] forKey:@"score"];
[gameScore saveInBackground];

如果有多人同时尝试更改“得分”,所有通话结束后得分是否准确?

1 个答案:

答案 0 :(得分:0)

不,这不会奏效。如果您在代码示例中明确设置了上述新分数,则您遇到竞争条件,客户可能不知道其他客户所做的更改。

你可以做的就是使用"增量"功能。这会向服务器发送一个命令,以便将服务器值原子递增一定量,因此客户实际上并不需要关心它们发送的值是什么 - 它们只是增加了一定量。服务器处理请求的原子性质,并避免在您明确设置分数时看到的竞争条件。

[gameScore incrementKey:@"score"];
[gameScore saveInBackground];

或者如果你想增加1以上......

[gameScore incrementKey:@"score" byAmount:@(2)];
[gameScore saveInBackground];