grpc
third_party
abseil-cpp
absl
base
internal
abseil-cpp/absl/base/internal/scheduling_mode.h
Go to the documentation of this file.
1
// Copyright 2017 The Abseil Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
//
15
// Core interfaces and definitions used by by low-level interfaces such as
16
// SpinLock.
17
18
#ifndef ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_
19
#define ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_
20
21
#include "absl/base/config.h"
22
23
namespace
absl
{
24
ABSL_NAMESPACE_BEGIN
25
namespace
base_internal {
26
27
// Used to describe how a thread may be scheduled. Typically associated with
28
// the declaration of a resource supporting synchronized access.
29
//
30
// SCHEDULE_COOPERATIVE_AND_KERNEL:
31
// Specifies that when waiting, a cooperative thread (e.g. a Fiber) may
32
// reschedule (using base::scheduling semantics); allowing other cooperative
33
// threads to proceed.
34
//
35
// SCHEDULE_KERNEL_ONLY: (Also described as "non-cooperative")
36
// Specifies that no cooperative scheduling semantics may be used, even if the
37
// current thread is itself cooperatively scheduled. This means that
38
// cooperative threads will NOT allow other cooperative threads to execute in
39
// their place while waiting for a resource of this type. Host operating system
40
// semantics (e.g. a futex) may still be used.
41
//
42
// When optional, clients should strongly prefer SCHEDULE_COOPERATIVE_AND_KERNEL
43
// by default. SCHEDULE_KERNEL_ONLY should only be used for resources on which
44
// base::scheduling (e.g. the implementation of a Scheduler) may depend.
45
//
46
// NOTE: Cooperative resources may not be nested below non-cooperative ones.
47
// This means that it is invalid to to acquire a SCHEDULE_COOPERATIVE_AND_KERNEL
48
// resource if a SCHEDULE_KERNEL_ONLY resource is already held.
49
enum
SchedulingMode
{
50
SCHEDULE_KERNEL_ONLY
= 0,
// Allow scheduling only the host OS.
51
SCHEDULE_COOPERATIVE_AND_KERNEL
,
// Also allow cooperative scheduling.
52
};
53
54
}
// namespace base_internal
55
ABSL_NAMESPACE_END
56
}
// namespace absl
57
58
#endif // ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition:
third_party/abseil-cpp/absl/base/config.h:171
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition:
third_party/abseil-cpp/absl/base/config.h:170
absl::base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL
@ SCHEDULE_COOPERATIVE_AND_KERNEL
Definition:
abseil-cpp/absl/base/internal/scheduling_mode.h:51
absl::base_internal::SchedulingMode
SchedulingMode
Definition:
abseil-cpp/absl/base/internal/scheduling_mode.h:49
absl::base_internal::SCHEDULE_KERNEL_ONLY
@ SCHEDULE_KERNEL_ONLY
Definition:
abseil-cpp/absl/base/internal/scheduling_mode.h:50
absl
Definition:
abseil-cpp/absl/algorithm/algorithm.h:31
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:09