lock.c 2.1 KB

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