kvs_data *desired = (kvs_data*) NULL;
kvs_data *expected = (kvs_data*) newkvs;
if (!_newkvs.compare_exchange_strong(desired, expected, memory_order_release,
- memory_order_release)) {
+ memory_order_relaxed)) {
// Should clean the allocated area
delete newkvs;
newkvs = _newkvs.load(memory_order_acquire);
copyidx = _copy_idx.load(memory_order_acquire);
while (copyidx < (oldlen << 1) &&
!_copy_idx.compare_exchange_strong(copyidx, copyidx +
- min_copy_work, memory_order_release, memory_order_release))
+ min_copy_work, memory_order_release, memory_order_relaxed))
copyidx = _copy_idx.load(memory_order_relaxed);
if (!(copyidx < (oldlen << 1)))
panic_start = copyidx;
topmap->_kvs.load(memory_order_acquire) == oldkvs) {
kvs_data *newkvs = _newkvs.load(memory_order_acquire);
topmap->_kvs.compare_exchange_strong(oldkvs, newkvs, memory_order_release,
- memory_order_release);
+ memory_order_relaxed);
}
}
// inserted keys
static inline bool CAS_key(kvs_data *kvs, int idx, void *expected, void *desired) {
return kvs->_data[2 * idx + 2].compare_exchange_strong(expected,
- desired, memory_order_release, memory_order_release);
+ desired, memory_order_release, memory_order_relaxed);
}
/**
static inline bool CAS_val(kvs_data *kvs, int idx, void *expected, void
*desired) {
bool res = kvs->_data[2 * idx + 3].compare_exchange_strong(expected,
- desired, memory_order_release, memory_order_release);
+ desired, memory_order_release, memory_order_relaxed);
/**
# If it is a successful put instead of a copy or any other internal
# operantions, expected != NULL