lock.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <rtdbg.h>
  5. #include "lock.h"
  6. #if 0
  7. #define LOGD LOG_D
  8. #define LOGE LOG_E
  9. #else
  10. #define LOGD rt_kprintf
  11. #define LOGE rt_kprintf
  12. #endif
  13. #define MALLOC malloc
  14. #define FREE free
  15. //static global lock
  16. static pthread_mutex_t *mutex_pool[LOCK_ID_MAX]={0};
  17. int lock_s_init(void)
  18. {
  19. int i,r;
  20. pthread_mutex_t *m=NULL;
  21. for(i=0; i<LOCK_ID_MAX; i++) {
  22. m = MALLOC(sizeof(pthread_mutex_t));
  23. if(m) {
  24. r = pthread_mutex_init(m, NULL);
  25. if(r) {
  26. LOGE("lock_s_init %d failed\n", i);
  27. FREE(m); m = NULL;
  28. }
  29. mutex_pool[i] = m;
  30. }
  31. }
  32. return 0;
  33. }
  34. int lock_s_deinit(void)
  35. {
  36. int i,r;
  37. for(i=0; i<LOCK_ID_MAX; i++) {
  38. if(mutex_pool[i]) {
  39. r = pthread_mutex_destroy(mutex_pool[i]);
  40. if(r) {
  41. LOGE("lock_s_deinit %d failed\n", i);
  42. continue;
  43. }
  44. mutex_pool[i] = NULL;
  45. }
  46. }
  47. return 0;
  48. }
  49. int lock_s_hold(int id)
  50. {
  51. if(id<0 || id>=LOCK_ID_MAX || !mutex_pool[id]) {
  52. return -1;
  53. }
  54. return pthread_mutex_lock(mutex_pool[id]);
  55. }
  56. int lock_s_release(int id)
  57. {
  58. if(id<0 || id>=LOCK_ID_MAX || !mutex_pool[id]) {
  59. return -1;
  60. }
  61. return pthread_mutex_unlock(mutex_pool[id]);
  62. }
  63. ///////////////////////////////////////////////////////
  64. lock_t lock_d_init(void)
  65. {
  66. int r;
  67. pthread_mutex_t *m=MALLOC(sizeof(pthread_mutex_t));
  68. if(!m) {
  69. return 0;
  70. }
  71. r = pthread_mutex_init(m, NULL);
  72. if(r) {
  73. LOGE("pthread_mutex_create failed\n");
  74. FREE(m); return 0;
  75. }
  76. return (lock_t)m;
  77. }
  78. int lock_d_deinit(lock_t h)
  79. {
  80. int r;
  81. if(!h) {
  82. return -1;
  83. }
  84. r = pthread_mutex_destroy((pthread_mutex_t*)h);
  85. FREE((void*)h);
  86. return r;
  87. }
  88. int lock_d_hold(lock_t h)
  89. {
  90. if(!h) {
  91. return -1;
  92. }
  93. return pthread_mutex_lock((pthread_mutex_t*)h);
  94. }
  95. int lock_d_release(lock_t h)
  96. {
  97. if(!h) {
  98. return -1;
  99. }
  100. return pthread_mutex_unlock((pthread_mutex_t*)h);
  101. }