// threads.c — concurrencia: dos hilos incrementan un contador compartido.
//   ./threads 1000       casi siempre imprime 2000
//   ./threads 1000000    casi nunca imprime 2000000. ¿Por qué?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

static volatile long counter = 0;
static long loops;

static void *worker(void *arg) {
    (void)arg;
    for (long i = 0; i < loops; i++)
        counter++;          // leer, sumar, escribir: tres pasos, no uno
    return NULL;
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "uso: threads <iteraciones>\n");
        return 1;
    }
    loops = atol(argv[1]);
    pthread_t a, b;
    pthread_create(&a, NULL, worker, NULL);
    pthread_create(&b, NULL, worker, NULL);
    pthread_join(a, NULL);
    pthread_join(b, NULL);
    printf("esperado: %ld\nobtenido: %ld\n", 2 * loops, counter);
    return 0;
}
