1 /* 2 * 3 * Copyright 2016 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_IMPL_CODEGEN_SYNC_H 20 #define GRPC_IMPL_CODEGEN_SYNC_H 21 /** Synchronization primitives for GPR. 22 23 The type gpr_mu provides a non-reentrant mutex (lock). 24 25 The type gpr_cv provides a condition variable. 26 27 The type gpr_once provides for one-time initialization. 28 29 The type gpr_event provides one-time-setting, reading, and 30 waiting of a void*, with memory barriers. 31 32 The type gpr_refcount provides an object reference counter, 33 with memory barriers suitable to control 34 object lifetimes. 35 36 The type gpr_stats_counter provides an atomic statistics counter. It 37 provides no memory barriers. 38 */ 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 /* Platform-specific type declarations of gpr_mu and gpr_cv. */ 45 #include <grpc/impl/codegen/port_platform.h> 46 47 #include <grpc/impl/codegen/sync_generic.h> 48 49 #if defined(GPR_POSIX_SYNC) 50 #include <grpc/impl/codegen/sync_posix.h> 51 #elif defined(GPR_WINDOWS) 52 #include <grpc/impl/codegen/sync_windows.h> 53 #elif defined(GPR_CUSTOM_SYNC) 54 #include <grpc/impl/codegen/sync_custom.h> 55 #else 56 #error Unable to determine platform for sync 57 #endif 58 59 #ifdef __cplusplus 60 } 61 #endif 62 63 #endif /* GRPC_IMPL_CODEGEN_SYNC_H */ 64