Two phase commit (in spanner) is similar to a lock, so the short answer is YES you need locks for distributed TRANSACTIONS
But you dont need transactions to do distributed computation. This is where CRDTs come in, they allow you to modify data locally w/ zero wait and the replication of these modifications happens asynchronously (imagine a split second later) and then there are algorithms that run on the receiver of the replication that automatically and intuitively resolve any conflicts that happened because the data was not (globally) locked
I will have a post next week on serverless.com explaining the internals of CRDTs, it should help clear stuff like this up.