#include #include #include #define MAX 254 void *deposito(void*meuid); void *retirada(void*meuid); void *verifica(void*); int quantia; int saldo; void main(argc, argv) int argc; char *argv[]; { int erro; int i, n; int *id; pthread_t tid[MAX]; if(argc != 3) { printf("erro na chamada do programa: p <#threads> \n"); exit(1); } n = atoi (argv[1]); printf("numero de threads: %d \n", n); if(n > MAX) { printf("o numero de threads e' maior que o maximo permitido: %d\n", MAX); exit(1); } quantia = atoi (argv[2]); saldo = 100*quantia; for (i = 0; i < n; i++) { id = (int *) malloc(sizeof(int)); *id = i; if (i>(n/2)) erro = pthread_create(&tid[i], NULL, deposito, (void *) (id)); else erro = pthread_create(&tid[i], NULL, retirada, (void *) (id)); if(erro) { printf("erro na criacao do thread %d\n", i); exit(1); } } verifica(NULL); } void *deposito (void* pi) { int gasta1, gasta2, i; while(1) { /* DEPOSITO DE quantia - DEVERIA SER ATOMICO! */ for (i=0;i VERIFICA! saldo=%d ILEGAL!!!!!!\n", sl); else printf("==> VERIFICA! saldo=%d OK!!!!!!\n", sl); gasta=0; do gasta++; while (gasta<1000000); } }