#include #include #include #define LIMIT 10000 int buffer = 0; int max = 5; int vez = 0; int querEntrar[2]; void *producer() { int c; for (c = 0; c < LIMIT; c++) { querEntrar[0] = 1; vez = 1; while (querEntrar[1] == 1 && vez == 1) { usleep(100); } if (buffer < max) { buffer++; printf("Buffer: %d\n", buffer); } querEntrar[0] = 0; usleep(100); } pthread_exit(NULL); } void consumer() { int c; for (c = 0; c < LIMIT; c++) { querEntrar[1] = 1; vez = 0; while (querEntrar[0] == 1 && vez == 0) { usleep(100); } if (buffer > 0) { buffer--; printf("Buffer: %d\n", buffer); } querEntrar[1] = 0; usleep(100); } } int main(int argc, char **argv) { pthread_t thread; querEntrar[0] = 0; querEntrar[1] = 0; vez = 0; pthread_create(&thread, NULL, &producer, NULL); consumer(); pthread_exit(NULL); }