es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pase una variable global a un método como argumento.

Variable global:

int REGISTRATION_SIZE = 10;

Quiero pasar una variable global (REGISTRATIONSIZE) como argumento del método waitfor_avaliable como waitfor_avaliable(int size). ¿Cómo puedo lograr eso?

void wait_for_available_resource(struct Patient *p, pthread_mutex_t *registration_mutex, pthread_cond_t *register_cond){
    int rnd_wait_time;
    pthread_mutex_lock(registration_mutex);
    while(REGISTRATION_SIZE == 0){
        rnd_wait_time = generate_rnd_numb(WAIT_TIME) + 1;
        printf("El paciente[%d] está esperando un escritorio disponible.\n",p->thread_num);
        sleepForMs(rnd_wait_time);
        increase_meters(p);
        checkForRestOrCafe(p);
        pthread_cond_wait(register_cond,registration_mutex);
    }
    REGISTRATION_SIZE--;
    printf("Tamaño de registro:%d\n",REGISTRATION_SIZE);
    pthread_mutex_unlock(registration_mutex);

}

Intenté hacerlo de esa manera, pero no funciona:

void wait_for_available_resource(struct Patient *p, pthread_mutex_t *registration_mutex, pthread_cond_t *register_cond, int *size){
    int rnd_wait_time;
    pthread_mutex_lock(registration_mutex);
    while(size == 0){
        rnd_wait_time = generate_rnd_numb(WAIT_TIME) + 1;
        printf("El paciente[%d] está esperando un escritorio disponible.\n",p->thread_num);
        sleepForMs(rnd_wait_time);
        increase_meters(p);
        checkForRestOrCafe(p);
        pthread_cond_wait(register_cond,registration_mutex);
    }
    size--;
    printf("Tamaño de registro:%d\n",size);
    pthread_mutex_unlock(registration_mutex);

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar una variable global como argumento al método wait_for_available_resource, simplemente agregue la variable global como parámetro a la firma del método, como se muestra a continuación:

    void wait_for_available_resource(struct Patient *p, pthread_mutex_t *registration_mutex, pthread_cond_t *register_cond, int size){
        int rnd_wait_time;
        pthread_mutex_lock(registration_mutex);
        while(size == 0){
            rnd_wait_time = generate_rnd_numb(WAIT_TIME) + 1;
            printf("El paciente[%d] está esperando por un mostrador disponible.\n",p->thread_num);
            sleepForMs(rnd_wait_time);
            increase_meters(p);
            checkForRestOrCafe(p);
            pthread_cond_wait(register_cond,registration_mutex);
        }
        size--;
        printf("Tamaño del registro:%d\n", size);
        pthread_mutex_unlock(registration_mutex);
    }
    

    Entonces, al llamar al método, pase la variable global como argumento:

    wait_for_available_resource(patient, &registration_mutex, &register_cond, REGISTRATION_SIZE);
    

    Tenga en cuenta que eliminamos la referencia de puntero del parámetro size y ajustamos el código en consecuencia para simplemente decrementar la variable size en lugar del puntero. Además, eliminamos la entidad HTML innecesaria " y utilizamos comillas dobles regulares en su lugar.

Comments are closed.