home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.disi.unige.it
/
2015-02-11.ftp.disi.unige.it.tar
/
ftp.disi.unige.it
/
pub
/
.person
/
GianuzziV
/
SO1
/
buffer.c
next >
Wrap
C/C++ Source or Header
|
2001-11-11
|
2KB
|
74 lines
/* file: buffer.c
gcc -D_REENTRANT buffer.c -lpthread
lettore / scrittore con un singolo scrittore e un singolo lettore.
Il buffer condiviso e' fomato da un solo item il cui accesso e'
controllato da un mutex.
*/
#include <stdio.h>
#include <pthread.h>
void reader_function(void);
void writer_function(void);
char make_new_item();
void consume_item( char ch );
char buffer;
int buffer_has_item = 0;
pthread_mutex_t mutex;
struct timespec delay;
main()
{
pthread_t reader;
pthread_mutex_init(&mutex, NULL);
pthread_create( &reader, NULL, (void*)&reader_function,
NULL);
writer_function();
}
char make_new_item()
{
char ch1, ch2;
printf("inserisci un carattere > ");
scanf("%c", &ch1);
scanf("%c", &ch2); /* legge il return */
return ch1;
}
void consume_item (char ch)
{
printf("Il reader ha letto %c\n", ch);
}
void writer_function(void)
{
while(1)
{
pthread_mutex_lock( &mutex );
if ( buffer_has_item == 0 )
{
buffer = make_new_item();
buffer_has_item = 1;
}
pthread_mutex_unlock( &mutex );
}
}
void reader_function(void)
{
while(1)
{
pthread_mutex_lock( &mutex );
if ( buffer_has_item == 1)
{
consume_item( buffer );
buffer_has_item = 0;
}
pthread_mutex_unlock( &mutex );
}
}