Coverage Report

Created: 2021-08-22 09:07

/src/skia/third_party/externals/icu/source/common/mutex.h
Line
Count
Source
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
  * Mutex is a helper class for convenient locking and unlocking of a UMutex.
33
  *
34
  * Creating a local scope Mutex will lock a UMutex, holding the lock until the Mutex
35
  * goes out of scope.
36
  *
37
  *  If no UMutex is specified, the ICU global mutex is implied.
38
  *
39
  *  For example:
40
  *
41
  *  static UMutex myMutex;
42
  *
43
  *  void Function(int arg1, int arg2)
44
  *  {
45
  *     static Object* foo;      // Shared read-write object
46
  *     Mutex mutex(&myMutex);   // or no args for the global lock
47
  *     foo->Method();
48
  *     // When 'mutex' goes out of scope and gets destroyed here, the lock is released
49
  *  }
50
  *
51
  *  Note:  Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
52
  *         returning a Mutex. This is a common mistake which silently slips through the
53
  *         compiler!!
54
  */
55
56
class U_COMMON_API Mutex : public UMemory {
57
public:
58
407k
    Mutex(UMutex *mutex = nullptr) : fMutex(mutex) {
59
407k
        umtx_lock(fMutex);
60
407k
    }
61
407k
    ~Mutex() {
62
407k
        umtx_unlock(fMutex);
63
407k
    }
64
65
    Mutex(const Mutex &other) = delete; // forbid assigning of this class
66
    Mutex &operator=(const Mutex &other) = delete; // forbid copying of this class
67
    void *operator new(size_t s) = delete;  // forbid heap allocation. Locals only.
68
69
private:
70
    UMutex   *fMutex;
71
};
72
73
74
U_NAMESPACE_END
75
76
#endif //_MUTEX_
77
//eof