Пример #1
0
void test_reader_list_broadcast(){
	reader_list_initialize();
	reader_t* reader_ritardoUnitario_bufferGenerico=reader_initialize("Reader 1",1,10);
	reader_t* reader_ritardo5_bufferGenerico=reader_initialize("Reader 2", 5,2);
	add_twoReaders(reader_ritardoUnitario_bufferGenerico,reader_ritardo5_bufferGenerico);
	reader_list_broadcast(messaggio);
	ASSERT_BUFFER_CONTAINS_ONLY(reader_ritardoUnitario_bufferGenerico->buffer->read_buffer, messaggio);
	ASSERT_BUFFER_CONTAINS_ONLY(reader_ritardo5_bufferGenerico->buffer->read_buffer, messaggio);
	clean_buffer_reader(reader_ritardoUnitario_bufferGenerico, reader_ritardo5_bufferGenerico);
	remove_twoReaders(reader_ritardoUnitario_bufferGenerico,reader_ritardo5_bufferGenerico);
	reader_list_destroy();	
}
void *dispatch_message(){   
    int poison=1; //finchè non è arrivata la poison pill
	while(poison){
		msg_t* message=provider_buffer_read();
		if (message!=NULL){
                    if (strcmp(message->content,"POISON_PILL_MSG")==0){//è una poison pill
			reader_list_kill();//uccido i reader nella lista
			poison=0;
                    }else{
			reader_list_broadcast(message);
			sleep(1);
                    }
		}
	}
    printf("\ndispatcher terminato=> POISON PILL inoltrata");
	pthread_exit(NULL);
}