constchar* GCCriticalSection::Enter(GcCause cause, CollectorType type) {
Runtime::Current()->GetHeap()->StartGC(self_, cause, type); if (self_ != nullptr) { return self_->StartAssertNoThreadSuspension(section_name_);
} else { // Workaround to avoid having to mark the whole function as NO_THREAD_SAFETY_ANALYSIS. auto kludge = []() ACQUIRE(Roles::uninterruptible_) NO_THREAD_SAFETY_ANALYSIS {};
kludge(); return nullptr;
}
}
void GCCriticalSection::Exit(constchar* old_cause) { if (self_ != nullptr) {
self_->EndAssertNoThreadSuspension(old_cause);
} else { // Workaround to avoid having to mark the whole function as NO_THREAD_SAFETY_ANALYSIS. auto kludge = []() RELEASE(Roles::uninterruptible_) NO_THREAD_SAFETY_ANALYSIS {};
kludge();
}
Runtime::Current()->GetHeap()->FinishGC(self_, collector::kGcTypeNone);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.