Geen omschrijving
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

vector-avoid-hold-and-wait.c 745B

1234567891011121314151617181920212223242526272829303132
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include "mythreads.h"
  6. #include "main-header.h"
  7. #include "vector-header.h"
  8. // use this to make lock acquisition ATOMIC
  9. pthread_mutex_t global = PTHREAD_MUTEX_INITIALIZER;
  10. void vector_add(vector_t *v_dst, vector_t *v_src) {
  11. // put GLOBAL lock around all lock acquisition...
  12. Pthread_mutex_lock(&global);
  13. Pthread_mutex_lock(&v_dst->lock);
  14. Pthread_mutex_lock(&v_src->lock);
  15. Pthread_mutex_unlock(&global);
  16. int i;
  17. for (i = 0; i < VECTOR_SIZE; i++) {
  18. v_dst->values[i] = v_dst->values[i] + v_src->values[i];
  19. }
  20. Pthread_mutex_unlock(&v_dst->lock);
  21. Pthread_mutex_unlock(&v_src->lock);
  22. }
  23. void fini() {}
  24. #include "main-common.c"