Accessing keyvalue from multiple threads


#1

Dear Support,

My application (using C library) will have multiple threads and each thread will access same bucket (eg: bindCounter) and get the current bindCounter(key value) and then update bindCounter++ (key value). There are some chances to access multiple thread at same time to get the current bindCounter(key value).

Question :
If thread 1 is trying to update the bindCounter(key value) but the same time thread 2 is also trying to get the value. Does thread 2 will get updated bindCounter(key value).

Kindly advise.

Regards,
Ravichandra


#2

All of Couchbase server’s operations are atomic, so in your example thread 2 will either see the complete ‘old’ document or the complete ‘new’ document - no intermediate state is exposed. If you want to synchronise updates you may want to look at the CAS operation - see <a href=http://docs.couchbase.com/couchbase-devguide-2.2/#retrieving-items-with-cas-values">Retreiving items with CAS values in the Couchbase dev guide.


#3

do your threads share the same connection handle?


#4

Hi,

Each thread will have its own connection.

Regards,
Ravichandra.


#5

Hi,

Can anybody help on this?

Thanks,
Ravichandra.


#6

If I understand your question correctly, then whether thread 2 sees the update is indeterminate - you have a classic thread race condition.

All Couchbase operations are atomic at the document level. So thread 2 will either see the complete ‘old’ document, or the complete ‘new’ document, it won’t observe an inconsistent state. See Reading / Writing Data in the dev guide for more information on this.

Assuming you want to do something like read a value, update some field and then write it back without another entity updating it, I suggest you look at the CAS (check-and-set) operation - see Retrieving Items with CAS values.