+void
+SharedObject::addSoftRef() const {
+ addRef();
+ umtx_atomic_inc(&softRefCount);
+}
+
+void
+SharedObject::removeSoftRef() const {
+ umtx_atomic_dec(&softRefCount);
+ removeRef();
+}
+
+UBool
+SharedObject::allSoftReferences() const {
+ return umtx_loadAcquire(totalRefCount) == umtx_loadAcquire(softRefCount);
+}
+