queue.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "mandelbrot.h"
  2. queue_t *initialize_queue()
  3. {
  4. queue_t *q;
  5. q = (queue_t *) malloc(sizeof(queue_t *));
  6. return q;
  7. }
  8. void enqueue(queue_t * q, mandel_t * w, pthread_mutex_t * lock)
  9. {
  10. struct queue_node_t *aux;
  11. pthread_mutex_lock(lock);
  12. if (q->head == NULL) {
  13. q->head =
  14. (struct queue_node_t *)
  15. malloc(sizeof(struct queue_node_t *));
  16. q->head->next = NULL;
  17. q->head->node = w;
  18. q->tail = q->head;
  19. } else {
  20. aux =
  21. (struct queue_node_t *)
  22. malloc(sizeof(struct queue_node_t *));
  23. aux->next = NULL;
  24. aux->node = w;
  25. q->tail->next = aux;
  26. q->tail = aux;
  27. }
  28. pthread_mutex_unlock(lock);
  29. }
  30. mandel_t *dequeue(queue_t * q, pthread_mutex_t * lock)
  31. {
  32. struct queue_node_t *aux;
  33. mandel_t *ret_val;
  34. if (q->head != NULL) {
  35. pthread_mutex_lock(lock);
  36. ret_val = q->head->node;
  37. aux = q->head;
  38. q->head = q->head->next;
  39. pthread_mutex_unlock(lock);
  40. free(aux);
  41. return (ret_val);
  42. }
  43. return NULL;
  44. }
  45. int is_empty(queue_t * q)
  46. {
  47. return (q->head == NULL);
  48. }
  49. void destroy_queue(queue_t * q)
  50. {
  51. struct queue_node_t *aux, *next;
  52. aux = q->head;
  53. while (aux != NULL) {
  54. next = aux->next;
  55. free(aux);
  56. if (next != NULL)
  57. aux = next;
  58. }
  59. free(q);
  60. }