OnixS C++ CBOE CFE Binary Order Entry (BOE) Handler  1.11.0
API documentation
Thread.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 
21 #include <set>
22 
25 
26 namespace OnixS {
27 namespace CboeCFE {
28 namespace Trading {
29 namespace BOE {
30 namespace Threading {
31 
32 /// Logical processors that a thread is allowed to run on (first logical CPU has index 0).
33 typedef size_t CpuIndex;
34 typedef std::set<CpuIndex> CpuIndexes;
35 
36 /// Represents set of CPU indices.
37 class ONIXS_CBOE_CFE_BOE_API ThreadAffinity
38 {
39 public:
40  /// Constructs thread affinity from the string presentation.
41  /// Symbol ',' is used as the CPU index delimiter.
42  explicit ThreadAffinity(const std::string &str);
43 
44  /// Destructs the instance.
45  ~ThreadAffinity();
46 
47  /// Read-only access to index collection.
48  const CpuIndexes &cpuIndexes() const;
49 
50  /// Collection of CPU indices.
51  CpuIndexes &cpuIndexes();
52 
53  /// Serializes thread affinity to the string presentation.
54  std::string toString();
55 
56 private:
58  ThreadAffinity &operator=(const ThreadAffinity &);
59 
60  CpuIndexes *indexes_;
61 };
62 
63 /// Current thread related tasks.
64 class ONIXS_CBOE_CFE_BOE_API ThisThread
65 {
66 public:
67  /// Suspends the execution of the current thread for
68  /// the given amount of time.
69  static void sleep(unsigned int milliseconds);
70 
71  /// Executes a single instruction during the given number of microseconds.
72  static void spinWait(unsigned int microseconds);
73 
74  /// Sets the processor affinity mask for the current thread.
75  static void affinity(const CpuIndexes &cpuIndexes);
76 
77  /// Sets the processor affinity mask for the current thread.
78  static void affinity(CpuIndex cpuIndex);
79 
80  /// Sets the priority for the current thread.
81  static void priority(int priority);
82 
83  /// Sets the scheduling policy for the current thread.
84  ///
85  /// \note This method also sets the priority to the minimal value for the new policy,
86  /// therefore, the priority should be set to a necessary value afterwards.
87  static void policy(int policy);
88 
89 
90  /// \return the processor number the current thread is running on during the call to this method.
91  static unsigned int processorNumber();
92 
93 private:
94  ThisThread(const ThisThread &);
95  ThisThread &operator=(const ThisThread &);
96 };
97 
98 }
99 }
100 }
101 }
102 }
std::set< CpuIndex > CpuIndexes
Definition: Thread.h:34
size_t CpuIndex
Logical processors that a thread is allowed to run on (first logical CPU has index 0)...
Definition: Thread.h:33
Current thread related tasks.
Definition: Thread.h:64