Пример #1
0
GPBase&
GPBase::assign (GPEnabled *nptr)
{
  if (nptr && atomicIncrement(&nptr->count) <= 0)
    nptr = 0;
  GPEnabled *optr = (GPEnabled*)atomicExchangePointer((void**)&ptr, (void*)nptr);
  if (optr)
    optr->unref();
  return *this;
}
Пример #2
0
GPBase&
GPBase::assign (GPEnabled *nptr)
{
  if (nptr)
    nptr->ref();
  int volatile *locka = locks+LOCKIDX(this);
  atomicAcquireOrSpin(locka);
  GPEnabled *old = ptr;
  ptr = nptr;
  atomicRelease(locka);
  if (old)
    old->unref();
  return *this;
}