diff --git a/resourceschedule/ffrt/c/shared_mutex.h b/resourceschedule/ffrt/c/shared_mutex.h new file mode 100644 index 0000000000000000000000000000000000000000..bdfa6a89f85615eff2a77f16bdb9fe87c2db1294 --- /dev/null +++ b/resourceschedule/ffrt/c/shared_mutex.h @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup FFRT + * @{ + * + * @brief Provides FFRT C APIs. + * + * @since 15 + */ + +/** + * @file shared_mutex.h + * + * @brief Declares the shared mutex interfaces in C. + * + * @library libffrt.z.so + * @kit FunctionFlowRuntimeKit + * @syscap SystemCapability.Resourceschedule.Ffrt.Core + * @since 15 + * @version 1.0 + */ + +#ifndef FFRT_API_C_SHARED_MUTEX_H +#define FFRT_API_C_SHARED_MUTEX_H + +#include "type_def_ext.h" + +/** + * @brief Initializes a rwlock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @param attr Indicates a pointer to the rwlock attribute. + * @return Returns ffrt_success if the rwlock is initialized; + returns ffrt_error_inval otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_init(ffrt_rwlock_t* rwlock, const ffrt_rwlockattr_t* attr); + +/** + * @brief Locks a write lock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is locked; + returns ffrt_error_inval or blocks the calling thread otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_wrlock(ffrt_rwlock_t* rwlock); + +/** + * @brief Attempts to lock a write lock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is locked; + returns ffrt_error_inval or ffrt_error_busy otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_trywrlock(ffrt_rwlock_t* rwlock); + +/** + * @brief Locks a read lock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is locked; + returns ffrt_error_inval or blocks the calling thread otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_rdlock(ffrt_rwlock_t* rwlock); + +/** + * @brief Attempts to lock a read lock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is locked; + returns ffrt_error_inval or ffrt_error_busy otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_tryrdlock(ffrt_rwlock_t* rwlock); + +/** + * @brief Unlocks a rwlock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is unlocked; + returns ffrt_error_inval otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_unlock(ffrt_rwlock_t* rwlock); + +/** + * @brief Destroys a rwlock. + * + * @param rwlock Indicates a pointer to the rwlock. + * @return Returns ffrt_success if the rwlock is destroyed; + returns ffrt_error_inval otherwise. + * @since 15 + * @version 1.0 + */ +FFRT_C_API int ffrt_rwlock_destroy(ffrt_rwlock_t* rwlock); + +#endif // FFRT_API_C_SHARED_MUTEX_H +/** @} */ \ No newline at end of file