#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <pthread.h>
 
using namespace std;
 
#define MAX_TD_NUM 2 //設定thread數
 
vector<int> all_ok_or_not;
pthread_t tid[MAX_TD_NUM];
int para[MAX_TD_NUM];
 
int check_all_ok(int *step);
void *thread(void *arg);
 
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;
 
int main (){
    int i,j;
  
    for(i=0;i<MAX_TD_NUM;i++){
        all_ok_or_not.push_back(-1);
        para[i]=i;
    }
    
    for(i=0;i<MAX_TD_NUM;i++)
        pthread_create(&tid[i], NULL, thread,&para[i]);
    
    for(i=0;i<MAX_TD_NUM;i++)
        pthread_join(tid[i], NULL);
    
    return 0;
}
 
void *thread(void *arg){
    int tid=*(int *)arg;
    int step=0;
    
    while(step<1000){
        
        step++; //假設工作完成 step++
        
        
        pthread_mutex_lock(&lock);
        all_ok_or_not[tid]=step; //把我id的那格設成0 代表我完成工作
        pthread_mutex_unlock(&lock);
        
        while(check_all_ok(&step) == 0){//若有thread未完成 則一直檢查
 
        }
        
        
        
    }
    
 
 
}
 
int check_all_ok(int *step){ //檢查是否每個thread都做完了 是回傳1 否則0
    int i;
    
    for(i=0;i<MAX_TD_NUM;i++){
        pthread_mutex_lock(&lock);                      
        if(*step!=all_ok_or_not[i]){
            pthread_mutex_unlock(&lock);                          
            return 0;
        }
        pthread_mutex_unlock(&lock);    
    }
    return 1;
}