I have a general question that occured to me while trying to implement a thread sychronization problem with sempaphores. I do not want to get into much (unrelated) detail so I am going to give the code that I think is important to clarify my question.
sem_t *mysema;
violatile int counter;
struct my_info{
    pthread_t t;
    int id;
};
void *barrier (void *arg){
    struct my_info *a = arg;
    arg->id = thrid;
    
    while(counter >0){
        do_work(&mysem[thrid])
        sem_wait(&mysema[third])
        
        display_my_work(arg);
        counter--;
        sem_post(&mysema[thrid+1])
    }   
    return NULL;            
}           
int main(int argc, char *argv[]){
    int N = atoi(argv[1]);
    mysema = mallon(N*(*mysema));
    counter = 50;
    /*semaphore intialisations */
    for(i=0; i<M; i++){
        sem_init(&mysema[i],0,0);
    }
    
    for(i=0; i<M; i++){
        mysema[i].id = i;
    }
    
    for(i=0; i<M; i++){
        pthread_create(&mysema.t[i], NULL, barrier, &tinfo[i])
    }   
    /*init wake up the first sempahore */
    sem_post(&mysema[0]);   
.
.
.
We have an array made of M semaphores intialised in 0 , where M is defined in command line by the user.
I know I am done when all M threads in total have done some necessary computations 50 times.
Each thread blocks itself, until the previous thread "sem_post's" it. The very first thread will be waken up by init.
My question is whether the threads will stop when '''counter = 0 '''. Do they all see the same variable - counter? (It is a global one, initialised in the main).
If thread zero , makes the very first time ```counter = 49''' do all the other threads(  thread 1, 2, ...M-1) see that ?
 
    