]> granicus.if.org Git - icu/commitdiff
ICU-10407 more efficient UnicodeString::refCount()
authorMarkus Scherer <markus.icu@gmail.com>
Tue, 17 Sep 2013 21:59:18 +0000 (21:59 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Tue, 17 Sep 2013 21:59:18 +0000 (21:59 +0000)
X-SVN-Rev: 34367

icu4c/source/common/unistr.cpp

index 5066fb4137a9cc845f39d827990a8b839de093cf..a21c1b4a26571f3e3ecc9fa69bd92b0a53d6ec88 100644 (file)
@@ -117,23 +117,19 @@ operator+ (const UnicodeString &s1, const UnicodeString &s2) {
 //========================================
 
 void
-UnicodeString::addRef()
-{  umtx_atomic_inc((u_atomic_int32_t *)fUnion.fFields.fArray - 1);}
+UnicodeString::addRef() {
+  umtx_atomic_inc((u_atomic_int32_t *)fUnion.fFields.fArray - 1);
+}
 
 int32_t
-UnicodeString::removeRef()
-{ return umtx_atomic_dec((u_atomic_int32_t *)fUnion.fFields.fArray - 1);}
+UnicodeString::removeRef() {
+  return umtx_atomic_dec((u_atomic_int32_t *)fUnion.fFields.fArray - 1);
+}
 
 int32_t
-UnicodeString::refCount() const 
-{ 
-    umtx_lock(NULL);
-    // Note: without the lock to force a memory barrier, we might see a very
-    //       stale value on some multi-processor systems.
-    int32_t  count = *((int32_t *)fUnion.fFields.fArray - 1);
-    umtx_unlock(NULL);
-    return count;
- }
+UnicodeString::refCount() const {
+  return umtx_loadAcquire(*((u_atomic_int32_t *)fUnion.fFields.fArray - 1));
+}
 
 void
 UnicodeString::releaseArray() {