LCOV - code coverage report
Current view: top level - intl/icu/source/common - mutex.h (source / functions) Hit Total Coverage
Test: output.info Lines: 7 7 100.0 %
Date: 2017-07-14 16:53:18 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /*
       4             : ******************************************************************************
       5             : *
       6             : *   Copyright (C) 1997-2013, International Business Machines
       7             : *   Corporation and others.  All Rights Reserved.
       8             : *
       9             : ******************************************************************************
      10             : */
      11             : //----------------------------------------------------------------------------
      12             : // File:     mutex.h
      13             : //
      14             : // Lightweight C++ wrapper for umtx_ C mutex functions
      15             : //
      16             : // Author:   Alan Liu  1/31/97
      17             : // History:
      18             : // 06/04/97   helena         Updated setImplementation as per feedback from 5/21 drop.
      19             : // 04/07/1999  srl               refocused as a thin wrapper
      20             : //
      21             : //----------------------------------------------------------------------------
      22             : #ifndef MUTEX_H
      23             : #define MUTEX_H
      24             : 
      25             : #include "unicode/utypes.h"
      26             : #include "unicode/uobject.h"
      27             : #include "umutex.h"
      28             : 
      29             : U_NAMESPACE_BEGIN
      30             : 
      31             : //----------------------------------------------------------------------------
      32             : // Code within that accesses shared static or global data should
      33             : // should instantiate a Mutex object while doing so. You should make your own 
      34             : // private mutex where possible.
      35             : 
      36             : // For example:
      37             : // 
      38             : // UMutex myMutex;
      39             : // 
      40             : // void Function(int arg1, int arg2)
      41             : // {
      42             : //    static Object* foo;     // Shared read-write object
      43             : //    Mutex mutex(&myMutex);  // or no args for the global lock
      44             : //    foo->Method();
      45             : //    // When 'mutex' goes out of scope and gets destroyed here, the lock is released
      46             : // }
      47             : //
      48             : // Note:  Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
      49             : //        returning a Mutex. This is a common mistake which silently slips through the
      50             : //        compiler!!
      51             : //
      52             : 
      53             : class U_COMMON_API Mutex : public UMemory {
      54             : public:
      55             :   inline Mutex(UMutex *mutex = NULL);
      56             :   inline ~Mutex();
      57             : 
      58             : private:
      59             :   UMutex   *fMutex;
      60             : 
      61             :   Mutex(const Mutex &other); // forbid copying of this class
      62             :   Mutex &operator=(const Mutex &other); // forbid copying of this class
      63             : };
      64             : 
      65          61 : inline Mutex::Mutex(UMutex *mutex)
      66          61 :   : fMutex(mutex)
      67             : {
      68          61 :   umtx_lock(fMutex);
      69          61 : }
      70             : 
      71         122 : inline Mutex::~Mutex()
      72             : {
      73          61 :   umtx_unlock(fMutex);
      74          61 : }
      75             : 
      76             : U_NAMESPACE_END
      77             : 
      78             : #endif //_MUTEX_
      79             : //eof

Generated by: LCOV version 1.13