Estava vendo um video sobre criação de threads em loop, tentei implementar o código dele porem o meu da um resultado completamente diferente e eu não sei o porque. Video em questão: https://www.youtube.com/watch?v=xoXzp4B8aQk&list=PLfqABt5AS4FmuQf70psXrsMLEDQXNkLq2&index=5 meu codigo:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
int mails = 0;
pthread_mutex_t mutex;
void* routine(){
for(int i = 0; i<15; i++){
pthread_mutex_lock(&mutex);
printf("mails: %d\n", mails);
mails++;
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, char* argv[]){
pthread_t th[4];
int i;
pthread_mutex_init(&mutex, NULL);
for (i=0;i<4;i++){
if (pthread_create(th + 1, NULL, &routine, NULL) != 0){
return 1;
}
printf("Thread %d has started\n", i);
}
for (i=0;i<4;i++){
if (pthread_join(th[i], NULL)!=0){
return 2;
}
printf("Thread %d has finished execution\n", i);
}
pthread_mutex_destroy(&mutex);
printf("Number of mails %d\n", mails);
return 0;
}
obs 1: reduzi o numero de mails para poder ver o que estava acontecendo
obs 2: uma versão do codigo sem o loop funcionava normalmente
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
int mails = 0;
pthread_mutex_t mutex;
void* routine(){
for(int i = 0; i<100; i++){
pthread_mutex_lock(&mutex);
mails++;
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, char* argv[]){
pthread_t p1, p2;
pthread_mutex_init(&mutex, NULL);
if (pthread_create(&p1, NULL, &routine, NULL) != 0){
return 1;
}
if (pthread_create(&p2, NULL, &routine, NULL) != 0){
return 2;
}
if (pthread_join(p1, NULL) !=0){
return 3;
}
if (pthread_join(p2, NULL) !=0){
return 4;
}
pthread_mutex_destroy(&mutex);
printf("Number of mails %d\n", mails);
return 0;
}