SDL_sysmutex.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:1k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * GNU pth mutexes
  3.  *
  4.  * Patrice Mandin
  5.  */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <pth.h>
  9. #include "SDL_error.h"
  10. #include "SDL_mutex.h"
  11. #include "SDL_sysmutex_c.h"
  12. /* Create a mutex */
  13. SDL_mutex *SDL_CreateMutex(void)
  14. {
  15. SDL_mutex *mutex;
  16. /* Allocate mutex memory */
  17. mutex = (SDL_mutex *)malloc(sizeof(*mutex));
  18. if ( mutex ) {
  19. /* Create the mutex, with initial value signaled */
  20.     if (!pth_mutex_init(&(mutex->mutexpth_p))) {
  21. SDL_SetError("Couldn't create mutex");
  22. free(mutex);
  23. mutex = NULL;
  24. }
  25. } else {
  26. SDL_OutOfMemory();
  27. }
  28. return(mutex);
  29. }
  30. /* Free the mutex */
  31. void SDL_DestroyMutex(SDL_mutex *mutex)
  32. {
  33. if ( mutex ) {
  34. free(mutex);
  35. }
  36. }
  37. /* Lock the mutex */
  38. int SDL_mutexP(SDL_mutex *mutex)
  39. {
  40. if ( mutex == NULL ) {
  41. SDL_SetError("Passed a NULL mutex");
  42. return -1;
  43. }
  44. pth_mutex_acquire(&(mutex->mutexpth_p), FALSE, NULL);
  45. return(0);
  46. }
  47. /* Unlock the mutex */
  48. int SDL_mutexV(SDL_mutex *mutex)
  49. {
  50. if ( mutex == NULL ) {
  51. SDL_SetError("Passed a NULL mutex");
  52. return -1;
  53. }
  54.     pth_mutex_release(&(mutex->mutexpth_p));
  55. return(0);
  56. }