prod_cons.h

Go to the documentation of this file.
00001 #ifndef _PROD_CONS_H_
00002 #define _PROD_CONS_H_
00003 
00004 #include <pthread.h>
00005 #include <semaphore.h>
00006 
00007 
00008 typedef struct {
00009         int prod_pos; // posicao que o produtor vai inserir no buffer
00010         int cons_pos; // posicao que o consumidor vai retirar do buffer
00011         sem_t prod_sem; // impede o produtor de escrever em cima de posicoes ocupadas
00012         sem_t cons_sem; // impede o consumidor de consumir posicoes com lixo
00013         pthread_mutex_t prod_mutex; // so um produtor insere de cada vez
00014         pthread_mutex_t cons_mutex; // so um consumidor retira de cada vez
00015         int buf_size; 
00016         void **buffer;
00017 } prod_cons_t;  
00018 
00019 /*
00020 static inline int __cas(volatile void *p, unsigned long oldval, unsigned long newval)
00021 {
00022     char ret;
00023     unsigned long readval;
00024 
00025     __asm__ ("lock; cmpxchgl %3, %1; sete %0"
00026              : "=q" (ret), "=m" (*__xg(p)), "=a" (readval)
00027              : "r" (newval), "m" (*__xg(p)), "a" (oldval) : "memory");
00028     return ret;
00029 }
00030 
00031 #define compare_and_swap(p, oldval, newval)     __cas(p, (unsigned long) oldval, (unsigned long) newval)
00032 */
00033 
00034 
00035 prod_cons_t *create_prod_cons(int sz);
00036 void put(prod_cons_t *prod_cons, void *val);
00037 void *get(prod_cons_t *prod_cons);
00038 void destroy_prod_cons(prod_cons_t *prod_cons);
00039 
00040 #endif
00041 
00042 

Generated on Tue Jan 17 19:18:38 2006 for Void by  doxygen 1.4.6