pthread_mutex_t mutex;
pthread_cond_t print;
int printId = 0;

void *func(void *arg)
{
    int *id = (int*)arg;
    for (int i = 0; i < 5; ++i)
    {
        pthread_mutex_lock(&mutex);
        while (*id != printId)
            pthread_cond_wait(&print, &mutex);
        cout << *id + 1 << " : ";
        for (int j = 1; j <= 5; ++j)
            cout << i*15 + j + (*id)*5 << " ";
        cout << endl;
        printId = (printId+1) % 3;
        pthread_cond_broadcast(&print);
        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

int main()
{
    pthread_t pid[3];
    for (int i = 0; i < 3; ++i)  pid[i] = i;
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&print, NULL);
    int id[3];
    for (int i = 0; i < 3; ++i) id[i] = i;
    for (int i = 0; i < 3; ++i)
        pthread_create(&pid[i], NULL, func, (void*)(&id[i]));

    for (int i = 0; i < 3; ++i)
        pthread_join(pid[i], NULL);

    pthread_cond_destroy(&print);
    pthread_mutex_destroy(&mutex);
    return 0;
}
来个 C 语言的