/* * Código para produtor e consumidor sem nenhum tipo * de controle de concorrência. */ #include #include #include #include #define N_ITENS 10 int buffer[N_ITENS]; int inicio = 0, final = 0; void* produtor(void *v) { int i; for (i = 0; i < 3 * N_ITENS; i++) { printf("Produtor, item = %d.\n", i); final = (final + 1) % N_ITENS; buffer[final] = i; sleep(1); /* Permite que a outra thread execute */ } return NULL; } void* consumidor(void *v) { int i; for (i = 0; i < 3 * N_ITENS; i++) { inicio = (inicio + 1) % N_ITENS; printf("Consumidor, item = %d.\n", buffer[inicio]); sleep(1); /* Permite que a outra thread execute */ } return NULL; } int main() { int i; pthread_t thr_produtor, thr_consumidor; /* Limpa o buffer */ for (i = 0; i < N_ITENS; i++) buffer[i] = 0; pthread_create(&thr_produtor, NULL, produtor, NULL); pthread_create(&thr_consumidor, NULL, consumidor, NULL); pthread_join(thr_produtor, NULL); pthread_join(thr_consumidor, NULL); return 0; }