GRPC C++
1.26.0
src
core
lib
gpr
spinlock.h
Go to the documentation of this file.
1
/*
2
*
3
* Copyright 2015 gRPC authors.
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
19
#ifndef GRPC_CORE_LIB_GPR_SPINLOCK_H
20
#define GRPC_CORE_LIB_GPR_SPINLOCK_H
21
22
#include <
grpc/support/port_platform.h
>
23
24
#include <
grpc/support/atm.h
>
25
26
/* Simple spinlock. No backoff strategy, gpr_spinlock_lock is almost always
27
a concurrency code smell. */
28
typedef
struct
{
29
gpr_atm
atm
;
30
}
gpr_spinlock
;
31
32
#ifdef __cplusplus
33
#define GPR_SPINLOCK_INITIALIZER (gpr_spinlock{0})
34
#else
35
#define GPR_SPINLOCK_INITIALIZER ((gpr_spinlock){0})
36
#endif
37
#define GPR_SPINLOCK_STATIC_INITIALIZER \
38
{ 0 }
39
40
#define gpr_spinlock_trylock(lock) (gpr_atm_acq_cas(&(lock)->atm, 0, 1))
41
#define gpr_spinlock_unlock(lock) (gpr_atm_rel_store(&(lock)->atm, 0))
42
#define gpr_spinlock_lock(lock) \
43
do { \
44
} while (!gpr_spinlock_trylock((lock)))
45
46
#endif
/* GRPC_CORE_LIB_GPR_SPINLOCK_H */
gpr_spinlock
Definition:
spinlock.h:28
gpr_spinlock::atm
gpr_atm atm
Definition:
spinlock.h:29
gpr_atm
intptr_t gpr_atm
Definition:
atm_gcc_atomic.h:30
atm.h
port_platform.h
Generated on Wed Sep 13 2023 00:00:00 for GRPC C++ by
1.8.20