Only one of multiple threads is writing

Viewed 50

I have a task to make a StarCraft like program with multiple pthreads as workers.

So , I have multiple pthreads that run the following function:

void* scv(int num){
    int minerals_carried = 0;
    while(map_minerals_remaining>0){
        minerals_carried = 0;
        for(int i = 0; i<number_of_fields; i++){
            if(fields[i].minerals != 0 && minerals_carried == 0){
                if(pthread_mutex_trylock(&fields[i].mutex)==0){
                
                    sleep(1);
                    // mine returns int
                    minerals_carried = mine(&fields[i]);
                    printf("SCV%d is carrying %d minerals from field %d\n",num,minerals_carried,i);
                    
                    if(pthread_mutex_unlock(&fields[i].mutex)!=0){
                        perror("pthread_mutex_unlock");
                        return NULL;
                    }
                }else{
                    perror("pthread_mutex_trylock");
                    return NULL;
                
                }
            }
            
        }
        
    }
    return NULL;
}

I create 5 pthreads and they all get created properly , but only the first one prints out like its supposed to do, and all the other ones dont seem to do anything. Any idea why that might be ?

EDIT : I was asked to show how I initialized number_of_fields and fields and this is it: I first declare them as global

typedef struct Mineral_Field_t{
    pthread_mutex_t mutex;
    int minerals;

}Mineral_Field;

Mineral_Field* fields;
int number_of_fields = 2;

And then I have the following piece of code at the start of the main function:

if(argv[1] != NULL){
        number_of_fields = atoi(argv[1]);
    }
    fields = malloc(number_of_fields*sizeof(Mineral_Field));
0 Answers
Related