Exemplo n.º 1
0
void *producer_function(void *b)
{
  buffer *buff = (buffer *)b;

  int i;
  for (i = 0; i < 100; i++)
    {
      pthread_mutex_lock(buff->mut);
      if(buff->full)
	{
	  printf("buffer full, waiting...\n");
	  pthread_cond_wait(buff->notFull, buff->mut);
	}

      int random = generate_random_number(RANDOM_NUMBER_UPPER_LIMIT);

      buffer_add(buff, random);

      printf("produced %d\n", random);

      pthread_mutex_unlock(buff->mut);

      /* Sleep either 1s or 4s (50% chance for each) */
      if (generate_random_number(99) < 50)
	{
	  usleep(1000000);
	}
      else 
	{
	  usleep(4000000);
	}
    }

  return NULL;
}
void Terrain::generate_rocks( void )
{
    std::pair<unsigned short , unsigned short> temp;
    for( auto i = 0; i < rocks; ++i )
    {
        temp.first = generate_random_number( min_rock_width , max_rock_width );
        temp.second = generate_random_number( min_rock_height , max_rock_height );
        rock_info.push_back( temp );
    }
}
Exemplo n.º 3
0
void *consumer_function(void *b)
{
  buffer *buff = (buffer *)b;

  int i;
  for (i = 0; i < 100; i++)
    {
      pthread_mutex_lock(buff->mut);
      if(buff->empty)
	{
	  printf("buffer empty, waiting...\n");
	  pthread_cond_wait(buff->notEmpty, buff->mut);
	}

      int consumed = buffer_consume(buff);

      printf("consumed %d\n", consumed);

      pthread_mutex_unlock(buff->mut);

      /* Sleep either 1s or 5s (50% chance for each) */
      if (generate_random_number(99) < 50)
	{
	  usleep(1000000);
	}
      else
	{
	  usleep(5000000);
	}
    }

  return NULL;
}
Exemplo n.º 4
0
static const char *
rdv_randompath(void) {
	uint64_t	r = generate_random_number();

	/* Looks like flickr for now */
	return (aprintf("photos/26907150@N08/%" PRIu64 "/lightbox", r));
}
Exemplo n.º 5
0
/** 
 * Método usado para gerar a lista de inteiros que serão utilizados para 
 * serem colocados nos respectivos BINs. O números são gerados de forma
 * aleatória. IMPORTANTE: A média global entre eles deve ser igual ou 
 * superior a 20.
 *
 * \param values Ponteiro para o array onde foram inseridos os números para
 *    serem empacotados
 * \see generate_random_number
 * \see NUMBERS_QUANTITY
 * \see NUMBERS_MINIMUM
 * \see NUMBERS_MAXIMUM
 */
int create_numbers_array (unsigned short int *values)
{
   unsigned short int i;

   for (i = 0; i < NUMBERS_QUANTITY; i++)
   {
      /** Os elementos da lista devem ter valores entre a media desejada e o espaço disponivel nos BINs */
      values[i] = generate_random_number(NUMBERS_MINIMUM , NUMBERS_MAXIMUM);
   }

   return 0;
}
Exemplo n.º 6
0
void construct_second_level(struct cell **arr,struct collision_keys **b,int b_size)
{
	struct cell **second_level_table=NULL;
	long long int i,j,num,c,loc;
	long long int n,r,sum=0;
	int nr,cr;
	for(i=0;i<MAX;i++)
	{
		if(arr[i]->collision>0)
		{
			n=(arr[i]->collision)*(arr[i]->collision);
			for(j=0;j<n;j++)
			{
				second_level_table[j]=(struct cell*)malloc(sizeof(struct cell));
				second_level_table[j]->next_level=NULL;
				second_level_table[j]->key=-1;
				second_level_table[j]->random_no=0;
				second_level_table[j]->collision=0;
			}
			arr[i]->next_level=second_level_table[0];
		}
	}	
	for(i=0;i<b_size;i++)
	{
		num=b[i]->key;
		c=generate_random_number(num);
		n=num;
		r=c;
		while(n>0||c>0)
		{
			nr=n%10;
			cr=r%10;
			n=n/10;
			r=r/10;
			sum=sum+nr*cr;
		}		
		loc=sum;
		sum=0;
		if((arr[b[i]->index]->next_level)[loc].key!=-1)
		{
			((arr[b[i]->index]->next_level)[loc].collision)++;
		}
		else
		{
			(arr[b[i]->index]->next_level)[loc].key=b[i]->key;
		}
		printf("\nh=%d\n",(arr[b[i]->index]->next_level)[loc].collision);
	}
	//printf("\nHey\n");
}
Exemplo n.º 7
0
int extract_input(char *file_name,struct cell**a,struct collision_keys **c_key)
{
	int r,nr,cr;
	long long int index,num=0,i,c,sum=0,rand,n,k=0,x;
	FILE *f;
	char* line;
	ssize_t len=0;
	ssize_t read;
	f=fopen(file_name,"r");
	if(f)
	{	while((read=getline(&line,&len,f))!=-1)
		{
			i=0;
			while((int)line[i]!=10)
			{
				while((int)line[i]!=44&&(int)line[i]!=10)
				{
					if((int)line[i]==32)
					{	
						i++;                               //spaces removed
					}
					else
					{
						r=(int)line[i]-48;
						num=num*10+r;
						i++;
					}
				}
				x=MAX;
				c=generate_random_number(x);
				rand=c;
				n=num;
				while(rand>0||n>0)
				{
					cr=rand%10;
					nr=n%10;
					rand=rand/10;
					n=n/10;
					sum=sum+nr*cr;
				}
				index=sum%MAX;
				if(a[index]->key!=-1)
				{	
					(a[index]->collision)++;
					c_key[k]=(struct collision_keys*)malloc(sizeof(struct collision_keys));
					c_key[k]->key=num;
					c_key[k]->index=index;
					k++;
				}
				else
				{
					a[index]->key=num;
					a[index]->random_no=c;
				}
				num=0;
				sum=0;
				if((int)line[i]!=10)                           //if it is not the last number in the line
					i++;
			}			
		}
	}
	printf("\nk=%lld\n",k);
	return k;
}
Exemplo n.º 8
0
// 정해진 정렬을 수행하고 수행 시간을 리턴해주는 함수 
float do_sort(int sort_code, int* randomNum, int* bCheckExistOfNum,  int number){
	time_t startTime,endTime;	// 함수 수행 시작시간, 종료시간 
	int i; 
	float gap;					// 총 함수 수행시간 
	switch(sort_code){			// 정렬 코드에 따라서 다른 정렬을 수행한다 
		//삽입 정렬의 경우 
		case 1:
			printf("난수 %d개를 생성 중입니다...\n", number);
			Sleep(3000);
            generate_random_number(randomNum, bCheckExistOfNum, number);
            printf("\n난수가 %d개 생성되었습니다.\n", number);
            Sleep(3000);
            printf("정렬 알고리즘을 시작합니다..\n");
            startTime = clock();
			insertSort(randomNum, number);
			endTime = clock();
			printf("정렬 알고리즘이 완료되었습니다.\n");
			gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산
			printf("총 수행 시간 : %f초\n", gap);
			Sleep(3000);
			printf("정렬된 결과를 출력합니다.\n");
			Sleep(3000);
			for(i = 0 ; i < number ; i++){
				printf("%d ", randomNum[i]);
			}
			printf("\n정렬이 완료되었습니다.\n");
			Sleep(3000); 
			return gap;
		// 선택 정렬의 경우 
		case 2:
			printf("난수 %d개를 생성 중입니다...\n", number);
			Sleep(3000);
            generate_random_number(randomNum, bCheckExistOfNum, number);
            printf("\n난수가 %d개 생성되었습니다.\n", number);
            Sleep(3000);
            printf("정렬 알고리즘을 시작합니다..\n");
            startTime = clock();
			selectionSort(randomNum, number);		// 선택 정렬 실행. 
			endTime = clock();
			printf("정렬 알고리즘이 완료되었습니다.\n");
			gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산
			printf("총 수행 시간 : %f초\n", gap);
			Sleep(3000);
			printf("정렬된 결과를 출력합니다.\n");
			Sleep(3000);
			for(i = 0 ; i < number ; i++){
				printf("%d ", randomNum[i]);
			}
			printf("\n정렬이 완료되었습니다.\n");
			Sleep(3000); 
			return gap;
		// 합병 정렬의 경우	
		case 3:
			printf("난수 %d개를 생성 중입니다...\n", number);
			Sleep(3000);
            generate_random_number(randomNum, bCheckExistOfNum, number);
            printf("\n난수가 %d개 생성되었습니다.\n", number);
            Sleep(3000);
            printf("정렬 알고리즘을 시작합니다..\n");
            startTime = clock();
			mergeSort(randomNum, 0, number);			// 합병 정렬 실행. 
			endTime = clock();
			printf("정렬 알고리즘이 완료되었습니다.\n");
			gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산
			printf("총 수행 시간 : %f초\n", gap);
			Sleep(3000);
			printf("정렬된 결과를 출력합니다.\n");
			Sleep(3000);
			for(i = 0 ; i < number ; i++){
				printf("%d ", randomNum[i]);
			}
			printf("\n정렬이 완료되었습니다.\n");
			Sleep(3000); 
			return gap;
		// 힙 정렬의 경우	
		case 4:
			printf("난수 %d개를 생성 중입니다...\n", number);
			Sleep(3000);
            generate_random_number(randomNum, bCheckExistOfNum, number);
            printf("\n난수가 %d개 생성되었습니다.\n", number);
            Sleep(3000);
            printf("정렬 알고리즘을 시작합니다..\n");
            startTime = clock();
			Heap_Sort(randomNum, number);			// 힙 정렬 실행. 
			endTime = clock();
			printf("정렬 알고리즘이 완료되었습니다.\n");
			gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산
			printf("총 수행 시간 : %f초\n", gap);
			Sleep(3000);
			printf("정렬된 결과를 출력합니다.\n");
			Sleep(3000);
			for(i = 0 ; i < number ; i++){
				printf("%d ", randomNum[i]);
			}
			printf("\n정렬이 완료되었습니다.\n");
			Sleep(3000); 
			return gap;
	}
}
Exemplo n.º 9
0
uint64_t * 
prime_gen ( uint64_t number_of_primes, 
			uint8_t mode, 
			uint8_t bitsize ) 
{
	uint64_t signal = 0;
    uint64_t *array = malloc ( sizeof ( uint64_t ) * number_of_primes );
    /*
        Basic Error Checking.
        1. malloc must not fail.
        2. number_of_primes (n) must be non - negative.
        3. bitsize must lie in [ 1 , 64 ].
    */
    
    if ( array == NULL || number_of_primes == 0  || bitsize == 0 || bitsize > 64 ) 
    {
        return NULL;
    }
    /*
        Seeding with time in order to make sure new random numbers
        are generated everytime.
    */
    srand ( time ( NULL ) );
    /*
        A flag to check whether to randomize every prime number or
        generate n continuous primes.
    */
        
    if ( mode == PRIME_RAND_CONT ) 
    {    
		uint64_t random_number;
restart:random_number = generate_random_number ( bitsize );
        mpz_t number , prime;
        mpz_init 		( number );
        mpz_init 		( prime );
        mpz_init_set_ui ( number , random_number );
        for( int i = 0 ; i < number_of_primes ; i++ ) 
        {
            mpz_nextprime ( prime , number );
            array[ i ] = mpz_get_ui ( prime );
            if ( bitsize != 64 && array[i] > (1ull << bitsize) )
            {
            	/*
            		Failure from this function.
            		The function failed because, the n numbers to be generated reached the end of bitsize.
            		Restart the algorithm.
            		If n primes do not exist in the given bit range, then quit and return the generated array.
            		Example: Say the function is expected to generate 100 primes in the bitsize of 2.
            			The function is designed to fail after RETRY_LIMIT number of attempts.
            		Example: Say 10 primes of bitsize 7 are requested and the random_number chosen was 127.  
            			The function is designed to retry again with a different random number.
            	*/
            	if ( signal++ < RETRY_LIMIT )
            	{
            		array[i] = -1;
            		goto restart;
            	}
            	else{
            		break;
            	}
            }
            
            mpz_init_set ( number , prime );
            
        }
        /*
            Freeing multi - precision numbers in the memory.
        */
        mpz_clear ( number );
        mpz_clear ( prime );
    }
    else
    {
        mpz_t number , prime;
        mpz_init ( number );
        mpz_init ( prime );
        for ( int i = 0 ; i < number_of_primes ; i ++ ) 
        {
            uint64_t random = generate_random_number ( bitsize );
            mpz_init_set_ui ( number , random );
            mpz_nextprime ( prime , number );
            array[i] = mpz_get_ui ( prime );
            if ( array[i] > ( 1ull << bitsize ) )
            {
            	i--;
            }
        }
        /*
            Freeing multi - precision numbers in the memory.
        */
        mpz_clear ( prime );
        mpz_clear ( number );
    }
    
    return array;
}
Exemplo n.º 10
0
int main(int args, char *argv[])
{
    int server;
    int receive_length, line_length;
    char ip_addr[BUFSIZE];
    char *line = NULL;
    char buf[BUFSIZE];
    FILE *fp = NULL;
    SSL_CTX *ctx;
	
	// Thread
	pthread_t* threads[2];
	if (pthread_mutex_init(&mutex, NULL) != 0)
	{
		printf("mutex init failed\n");
		exit(-1);
	}
	
	my_ip_addr = get_ip_addr();
    printf("My ip addr is: %s\n", my_ip_addr);

    /* READ INPUT FILE */
    fp = fopen("config_file", "r");
    if(fp == NULL){
	fprintf(stderr, "Error opening config file with name 'config_file'. Exiting.\n");
	exit(1);
    }
	fp_output = fopen("Lab4-E-2.txt", "w");
    if(fp_output == NULL){
	fprintf(stderr, "Error opening config file with name 'Lab4-E-2.txt'. Exiting.\n");
	exit(1);
    }

    printf("Reading input file...\n");
    while(getline(&line, &line_length, fp) > 0){
	if(strstr(line, "host_ip") != NULL){
	    sscanf(line, "host_ip: %s\n", ip_addr);
	}
	else if(strstr(line, "port") != NULL){
	    sscanf(line, "port: %d\n", &port);
	}
	else if(strstr(line, "range") != NULL){
	    sscanf(line, "range: %d\n", &range);
	}
	else if(strstr(line, "rate") != NULL){
	    sscanf(line, "rate: %d\n", &rate);
	}
	else{
	    fprintf(stderr, "Unrecognized line found: %s. Ignoring.\n", line);
	}
    }
    fclose(fp);
    /* FINISH READING INPUT FILE */

    printf("Connecting to: %s:%d\n", ip_addr, port);
	fprintf(fp_output,"Connecting to: %s:%d\n", ip_addr, port);
	
    /* SET UP TLS COMMUNICATION */
    SSL_library_init();
    ctx = initialize_client_CTX();
    server = open_port(ip_addr, port);
    ssl = SSL_new(ctx);
    SSL_set_fd(ssl, server);
    /* FINISH SETUP OF TLS COMMUNICATION */

    /* SEND HEART RATE TO SERVER */
    if (SSL_connect(ssl) == -1){ //make sure connection is valid
	fprintf(stderr, "Error. TLS connection failure. Aborting.\n");
	ERR_print_errors_fp(stderr);
	exit(1);
    }
    else {
	printf("Client-Server connection complete with %s encryption\n", SSL_get_cipher(ssl));
	fprintf(fp_output, "Client-Server connection complete with %s encryption\n", SSL_get_cipher(ssl));
	fflush(fp_output);
	display_server_certificate(ssl);
    }

    // Thread
	pthread_create(&threads[0],NULL,worker_read,NULL);
	
	while(1)
	{
		printf("Current settings: rate: %d, range: %d\n", rate, range);
		heart_rate = 
			generate_random_number(AVERAGE_HEART_RATE-(double)range, AVERAGE_HEART_RATE+(double)range);
		memset(buf,0,sizeof(buf)); //clear out the buffer

		//populate the buffer with information about the ip address of the client and the heart rate
		sprintf(buf, "Heart rate of patient %s is %4.2f", my_ip_addr, heart_rate);
		printf("Sending message '%s' to server...\n", buf);
		fprintf(fp_output,"Sending message '%s' to server...\n", buf);
		fflush(fp_output);
		SSL_write(ssl, buf, strlen(buf));

		sleep(rate);
    }
	
	// Thread
	pthread_join(threads[0],NULL);
	
    /* FINISH HEART RATE TO SERVER */

    //clean up operations
    SSL_free(ssl);
    close(server);
    SSL_CTX_free(ctx);
    return 0;
}