chromium之dynamic_annotations

看看介绍
// This file defines dynamic annotations for use with dynamic analysis
// tool such as valgrind, PIN, etc.
//
// Dynamic annotation is a source code annotation that affects
// the generated code (that is, the annotation is not a comment).
// Each such annotation is attached to a particular
// instruction and/or to a particular object (address) in the program.
//
// The annotations that should be used by users are macros in all upper-case
// (e.g., ANNOTATE_NEW_MEMORY).
//
// Actual implementation of these macros may differ depending on the
// dynamic analysis tool being used.
//
// This file supports the following dynamic analysis tools:
// - None (NDEBUG is defined).
//    Macros are defined empty.
// - ThreadSanitizer (NDEBUG is not defined).
//    Macros are defined as calls to non-inlinable empty functions
//    that are intercepted by ThreadSanitizer.
//

使用方法:

// -------------------------------------------------------------
// Annotations useful when implementing condition variables such as CondVar,
// using conditional critical sections (Await/LockWhen) and when constructing
// user-defined synchronization mechanisms.
//
// The annotations ANNOTATE_HAPPENS_BEFORE() and ANNOTATE_HAPPENS_AFTER() can
// be used to define happens-before arcs in user-defined synchronization
// mechanisms:  the race detector will infer an arc from the former to the
// latter when they share the same argument pointer.
//
// Example 1 (reference counting):
//
// void Unref() {
//   ANNOTATE_HAPPENS_BEFORE(&refcount_);
//   if (AtomicDecrementByOne(&refcount_) == 0) {
//     ANNOTATE_HAPPENS_AFTER(&refcount_);
//     delete this;
//   }
// }
//
// Example 2 (message queue):
//
// void MyQueue::Put(Type *e) {
//   MutexLock lock(&mu_);
//   ANNOTATE_HAPPENS_BEFORE(e);
//   PutElementIntoMyQueue(e);
// }
//
// Type *MyQueue::Get() {
//   MutexLock lock(&mu_);
//   Type *e = GetElementFromMyQueue();
//   ANNOTATE_HAPPENS_AFTER(e);
//   return e;
// }
//
// Note: when possible, please use the existing reference counting and message
// queue implementations instead of inventing new ones.

猜你喜欢

转载自www.cnblogs.com/ckelsel/p/9158756.html