mutex.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * @file mutex.h
  3. * FuriMutex
  4. */
  5. #pragma once
  6. #include "base.h"
  7. #include "thread.h"
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. typedef enum {
  12. FuriMutexTypeNormal,
  13. FuriMutexTypeRecursive,
  14. } FuriMutexType;
  15. typedef void FuriMutex;
  16. /** Allocate FuriMutex
  17. *
  18. * @param[in] type The mutex type
  19. *
  20. * @return pointer to FuriMutex instance
  21. */
  22. FuriMutex* furi_mutex_alloc(FuriMutexType type);
  23. /** Free FuriMutex
  24. *
  25. * @param instance The pointer to FuriMutex instance
  26. */
  27. void furi_mutex_free(FuriMutex* instance);
  28. /** Acquire mutex
  29. *
  30. * @param instance The pointer to FuriMutex instance
  31. * @param[in] timeout The timeout
  32. *
  33. * @return The furi status.
  34. */
  35. FuriStatus furi_mutex_acquire(FuriMutex* instance, uint32_t timeout);
  36. /** Release mutex
  37. *
  38. * @param instance The pointer to FuriMutex instance
  39. *
  40. * @return The furi status.
  41. */
  42. FuriStatus furi_mutex_release(FuriMutex* instance);
  43. /** Get mutex owner thread id
  44. *
  45. * @param instance The pointer to FuriMutex instance
  46. *
  47. * @return The furi thread identifier.
  48. */
  49. FuriThreadId furi_mutex_get_owner(FuriMutex* instance);
  50. #ifdef __cplusplus
  51. }
  52. #endif