Phosphor
thread.h
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 2016 Couchbase, Inc
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #pragma once
19 
20 #include <cstdint>
21 
22 #include "core.h"
23 
24 #if __APPLE__
25 /*
26  * Apple's clang is awkward and disables thread_local keyword support
27  * @todo Fixed in XCode 8 (MacOS 10.11.5 / 10.12 or later)
28  */
29 #define THREAD_LOCAL __thread
30 #else
31 #define THREAD_LOCAL thread_local
32 #endif
33 
34 namespace phosphor {
35  namespace platform {
36 
46  PHOSPHOR_API
47  int getCurrentProcessID();
48 
58  PHOSPHOR_API
59  uint32_t getCurrentThreadID();
60 
74  inline uint32_t getCurrentThreadIDCached() {
75  static THREAD_LOCAL uint32_t thread_id;
76 
77  if (unlikely(!thread_id)) {
78  thread_id = getCurrentThreadID();
79  }
80 
81  return thread_id;
82  }
83  }
84 }
Definition: category_registry.h:32