Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
c-utility/inc/azure_c_shared_utility/lock.h@0:f7f1f0d76dd6, 2018-08-23 (annotated)
- Committer:
- XinZhangMS
- Date:
- Thu Aug 23 06:52:14 2018 +0000
- Revision:
- 0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
XinZhangMS | 0:f7f1f0d76dd6 | 1 | // Copyright (c) Microsoft. All rights reserved. |
XinZhangMS | 0:f7f1f0d76dd6 | 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. |
XinZhangMS | 0:f7f1f0d76dd6 | 3 | |
XinZhangMS | 0:f7f1f0d76dd6 | 4 | /** @file lock.h |
XinZhangMS | 0:f7f1f0d76dd6 | 5 | * @brief A minimalistic platform agnostic lock abstraction for thread |
XinZhangMS | 0:f7f1f0d76dd6 | 6 | * synchronization. |
XinZhangMS | 0:f7f1f0d76dd6 | 7 | * @details The Lock component is implemented in order to achieve thread |
XinZhangMS | 0:f7f1f0d76dd6 | 8 | * synchronization, as we may have a requirement to consume locks |
XinZhangMS | 0:f7f1f0d76dd6 | 9 | * across different platforms. This component exposes some generic |
XinZhangMS | 0:f7f1f0d76dd6 | 10 | * APIs so that it can be extended for platform specific |
XinZhangMS | 0:f7f1f0d76dd6 | 11 | * implementations. |
XinZhangMS | 0:f7f1f0d76dd6 | 12 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 13 | |
XinZhangMS | 0:f7f1f0d76dd6 | 14 | #ifndef LOCK_H |
XinZhangMS | 0:f7f1f0d76dd6 | 15 | #define LOCK_H |
XinZhangMS | 0:f7f1f0d76dd6 | 16 | |
XinZhangMS | 0:f7f1f0d76dd6 | 17 | #include "azure_c_shared_utility/macro_utils.h" |
XinZhangMS | 0:f7f1f0d76dd6 | 18 | #include "azure_c_shared_utility/umock_c_prod.h" |
XinZhangMS | 0:f7f1f0d76dd6 | 19 | |
XinZhangMS | 0:f7f1f0d76dd6 | 20 | #ifdef __cplusplus |
XinZhangMS | 0:f7f1f0d76dd6 | 21 | extern "C" { |
XinZhangMS | 0:f7f1f0d76dd6 | 22 | #endif |
XinZhangMS | 0:f7f1f0d76dd6 | 23 | |
XinZhangMS | 0:f7f1f0d76dd6 | 24 | typedef void* LOCK_HANDLE; |
XinZhangMS | 0:f7f1f0d76dd6 | 25 | |
XinZhangMS | 0:f7f1f0d76dd6 | 26 | #define LOCK_RESULT_VALUES \ |
XinZhangMS | 0:f7f1f0d76dd6 | 27 | LOCK_OK, \ |
XinZhangMS | 0:f7f1f0d76dd6 | 28 | LOCK_ERROR \ |
XinZhangMS | 0:f7f1f0d76dd6 | 29 | |
XinZhangMS | 0:f7f1f0d76dd6 | 30 | /** @brief Enumeration specifying the lock status. |
XinZhangMS | 0:f7f1f0d76dd6 | 31 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 32 | DEFINE_ENUM(LOCK_RESULT, LOCK_RESULT_VALUES); |
XinZhangMS | 0:f7f1f0d76dd6 | 33 | |
XinZhangMS | 0:f7f1f0d76dd6 | 34 | /** |
XinZhangMS | 0:f7f1f0d76dd6 | 35 | * @brief This API creates and returns a valid lock handle. |
XinZhangMS | 0:f7f1f0d76dd6 | 36 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 37 | * @return A valid @c LOCK_HANDLE when successful or @c NULL otherwise. |
XinZhangMS | 0:f7f1f0d76dd6 | 38 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 39 | MOCKABLE_FUNCTION(, LOCK_HANDLE, Lock_Init); |
XinZhangMS | 0:f7f1f0d76dd6 | 40 | |
XinZhangMS | 0:f7f1f0d76dd6 | 41 | /** |
XinZhangMS | 0:f7f1f0d76dd6 | 42 | * @brief Acquires a lock on the given lock handle. Uses platform |
XinZhangMS | 0:f7f1f0d76dd6 | 43 | * specific mutex primitives in its implementation. |
XinZhangMS | 0:f7f1f0d76dd6 | 44 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 45 | * @param handle A valid handle to the lock. |
XinZhangMS | 0:f7f1f0d76dd6 | 46 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 47 | * @return Returns @c LOCK_OK when a lock has been acquired and |
XinZhangMS | 0:f7f1f0d76dd6 | 48 | * @c LOCK_ERROR when an error occurs. |
XinZhangMS | 0:f7f1f0d76dd6 | 49 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 50 | MOCKABLE_FUNCTION(, LOCK_RESULT, Lock, LOCK_HANDLE, handle); |
XinZhangMS | 0:f7f1f0d76dd6 | 51 | |
XinZhangMS | 0:f7f1f0d76dd6 | 52 | /** |
XinZhangMS | 0:f7f1f0d76dd6 | 53 | * @brief Releases the lock on the given lock handle. Uses platform |
XinZhangMS | 0:f7f1f0d76dd6 | 54 | * specific mutex primitives in its implementation. |
XinZhangMS | 0:f7f1f0d76dd6 | 55 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 56 | * @param handle A valid handle to the lock. |
XinZhangMS | 0:f7f1f0d76dd6 | 57 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 58 | * @return Returns @c LOCK_OK when the lock has been released and |
XinZhangMS | 0:f7f1f0d76dd6 | 59 | * @c LOCK_ERROR when an error occurs. |
XinZhangMS | 0:f7f1f0d76dd6 | 60 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 61 | MOCKABLE_FUNCTION(, LOCK_RESULT, Unlock, LOCK_HANDLE, handle); |
XinZhangMS | 0:f7f1f0d76dd6 | 62 | |
XinZhangMS | 0:f7f1f0d76dd6 | 63 | /** |
XinZhangMS | 0:f7f1f0d76dd6 | 64 | * @brief The lock instance is destroyed. |
XinZhangMS | 0:f7f1f0d76dd6 | 65 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 66 | * @param handle A valid handle to the lock. |
XinZhangMS | 0:f7f1f0d76dd6 | 67 | * |
XinZhangMS | 0:f7f1f0d76dd6 | 68 | * @return Returns @c LOCK_OK when the lock object has been |
XinZhangMS | 0:f7f1f0d76dd6 | 69 | * destroyed and @c LOCK_ERROR when an error occurs. |
XinZhangMS | 0:f7f1f0d76dd6 | 70 | */ |
XinZhangMS | 0:f7f1f0d76dd6 | 71 | MOCKABLE_FUNCTION(, LOCK_RESULT, Lock_Deinit, LOCK_HANDLE, handle); |
XinZhangMS | 0:f7f1f0d76dd6 | 72 | |
XinZhangMS | 0:f7f1f0d76dd6 | 73 | #ifdef __cplusplus |
XinZhangMS | 0:f7f1f0d76dd6 | 74 | } |
XinZhangMS | 0:f7f1f0d76dd6 | 75 | #endif |
XinZhangMS | 0:f7f1f0d76dd6 | 76 | |
XinZhangMS | 0:f7f1f0d76dd6 | 77 | #endif /* LOCK_H */ |