Я успешно использовал статический мьютекс, но у меня проблема с динамической версией. В выводе переменная должна быть равна нулю. Пожалуйста, помогите. Есть ли лучший способ написать это?Mutex dynamic выделено
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#define N 20
int beers=20;
void* drink(void*);
//pthread_mutex_t lockk = PTHREAD_MUTEX_INITIALIZER;
typedef struct st1{
pthread_mutex_t mutex;
int val;
}my_struct_t;
int main(){
pthread_t th[N];
int i;
void* return_val;
my_struct_t *data;
data = malloc(sizeof(my_struct_t));
data->val = 20;
pthread_mutex_init(&data->mutex,NULL);
for(i=0;i<N;i++)
pthread_create(&th[i], NULL, drink, &data);
for(i=0;i<N;i++)
pthread_join(th[i], &return_val);
pthread_mutex_destroy(&data->mutex);
printf("%d\n", beers);
}
void* drink(void* p){
int i;
my_struct_t *data = (my_struct_t *)p;
pthread_mutex_lock(&data->mutex);
beers--;
pthread_mutex_unlock(&data->mutex);
//}
return NULL;
}
Где я получил отказ? :)
.. быть последовательным на отступа? –