OnixS C++ CBOE CFE Binary Order Entry (BOE) Handler  1.11.0
API documentation
Mutex.h
Go to the documentation of this file.
1 /*
2 * Copyright Onix Solutions Limited [OnixS]. All rights reserved.
3 *
4 * This software owned by Onix Solutions Limited [OnixS] and is protected by copyright law
5 * and international copyright treaties.
6 *
7 * Access to and use of the software is governed by the terms of the applicable OnixS Software
8 * Services Agreement (the Agreement) and Customer end user license agreements granting
9 * a non-assignable, non-transferable and non-exclusive license to use the software
10 * for it's own data processing purposes under the terms defined in the Agreement.
11 *
12 * Except as otherwise granted within the terms of the Agreement, copying or reproduction of any part
13 * of this source code or associated reference material to any other location for further reproduction
14 * or redistribution, and any amendments to this copyright notice, are expressly prohibited.
15 *
16 * Any reproduction or redistribution for sale or hiring of the Software not in accordance with
17 * the terms of the Agreement is a violation of copyright law.
18 */
19 #pragma once
20 
22 
23 namespace OnixS
24 {
25 namespace CboeCFE
26 {
27 namespace Trading
28 {
29 namespace BOE
30 {
31 namespace Threading
32 {
33 
34 /// Mutex.
35 ///
36 /// Protects resources from simultaneous access by multiple threads.
37 ///
38 /// Only one thread at a time can own instance of this class.
39 ///
40 /// This implementation is optimized for locking threads that are in the same process.
41 ///
42 /// \note It is NOT suitable for interprocess synchronization.
43 /// \note Recursive locking is NOT supported.
44 class ONIXS_CBOE_CFE_BOE_API Mutex
45 {
46 public:
47  friend class Condition;
48 
49  /// Initializes the instance.
50  Mutex();
51 
52  /// Destructs the instance.
53  ~Mutex();
54 
55  /// Acquires the lock ownership.
56  ///
57  /// If the mutex is already occupied by another thread
58  /// blocks the current thread and waits until it
59  /// will be released by the owner.
60  void acquire();
61 
62  /// Tries to acquires the lock ownership.
63  ///
64  /// \return `false` if the mutex is already occupied by another thread,
65  /// otherwise - `true`.
66  bool tryAcquire();
67 
68  /// Releases the ownership (lock) and
69  /// unblocks one of the waiting threads.
70  void release();
71 
72 private:
73  void *impl_;
74 
75  // Copying & assignment is prohibited.
76  Mutex(const Mutex &);
77  Mutex &operator=(const Mutex &);
78 };
79 
80 }
81 }
82 }
83 }
84 }