1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 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 * http://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 16 /** 17 * @addtogroup Ffrt 18 * @{ 19 * 20 * @brief ffrt provides APIs. 21 * 22 * 23 * @syscap SystemCapability.Resourceschedule.Ffrt.Core 24 * 25 * @since 10 26 */ 27 28 /** 29 * @file mutex.h 30 * 31 * @brief Declares the mutex interfaces in C. 32 * 33 * @syscap SystemCapability.Resourceschedule.Ffrt.Core 34 * @since 10 35 * @version 1.0 36 */ 37 #ifndef FFRT_API_C_MUTEX_H 38 #define FFRT_API_C_MUTEX_H 39 #include "type_def.h" 40 41 /** 42 * @brief Initializes a mutex. 43 * 44 * @param mutex Indicates a pointer to the mutex. 45 * @param attr Indicates a pointer to the mutex attribute. 46 * @return Returns <b>ffrt_thrd_success</b> if the mutex is initialized; 47 returns <b>ffrt_thrd_error</b> otherwise. 48 * @since 10 49 * @version 1.0 50 */ 51 FFRT_C_API int ffrt_mutex_init(ffrt_mutex_t* mutex, const ffrt_mutexattr_t* attr); 52 53 /** 54 * @brief Locks a mutex. 55 * 56 * @param mutex Indicates a pointer to the mutex. 57 * @return Returns <b>ffrt_thrd_success</b> if the mutex is locked; 58 returns <b>ffrt_thrd_error</b> or blocks the calling thread otherwise. 59 * @since 10 60 * @version 1.0 61 */ 62 FFRT_C_API int ffrt_mutex_lock(ffrt_mutex_t* mutex); 63 64 /** 65 * @brief Unlocks a mutex. 66 * 67 * @param mutex Indicates a pointer to the mutex. 68 * @return Returns <b>ffrt_thrd_success</b> if the mutex is unlocked; 69 returns <b>ffrt_thrd_error</b> otherwise. 70 * @since 10 71 * @version 1.0 72 */ 73 FFRT_C_API int ffrt_mutex_unlock(ffrt_mutex_t* mutex); 74 75 /** 76 * @brief Attempts to lock a mutex. 77 * 78 * @param mutex Indicates a pointer to the mutex. 79 * @return Returns <b>ffrt_thrd_success</b> if the mutex is locked; 80 returns <b>ffrt_thrd_error</b> or <b>ffrt_thrd_busy</b> otherwise. 81 * @since 10 82 * @version 1.0 83 */ 84 FFRT_C_API int ffrt_mutex_trylock(ffrt_mutex_t* mutex); 85 86 /** 87 * @brief Destroys a mutex. 88 * 89 * @param mutex Indicates a pointer to the mutex. 90 * @return Returns <b>ffrt_thrd_success</b> if the mutex is destroyed; 91 returns <b>ffrt_thrd_error</b> otherwise. 92 * @since 10 93 * @version 1.0 94 */ 95 FFRT_C_API int ffrt_mutex_destroy(ffrt_mutex_t* mutex); 96 #endif 97