Пример #1
0
void *thread_cli_fun(void *arg) {
    double          busy;
    int             inx;
    Msg            *msg;
    struct rusage   r_start;
    struct rusage   r_stop;
    struct timeval  t_elapsed_data;
    struct timeval  t_elapsed_total;
    struct timeval  t_start_data;
    struct timeval  t_start_total;
    struct timeval  t_stop;

    arg = arg; // touch
    util_time_timer_start(&t_start_total);
    util_time_timer_start(&t_start_data);
    util_cpu_timer_start(&r_start);
    for (inx = 0; inx < loop; inx++) {
        if (verbose)
            printf("count=%d\n", inx);
        msg = msg_queue_remove(&mutex_pool, &queue_pool);
        assert(msg != NULL);
        if (csize) {
            msg->cbuf = (char *) malloc(csize);
            memcpy(msg->cbuf, send_buffer2, csize);
        }
        if (dsize) {
            msg->dbuf = (char *) malloc(dsize);
            memcpy(msg->dbuf, send_buffer, dsize);
        }
        msg_queue_add(&mutex_srv, &queue_srv, msg);
        cv_signal(&cv_srv);
        cv_wait(&cv_cli);
        msg = msg_queue_remove(&mutex_cli, &queue_cli);
        assert(msg != NULL);
        msg_queue_add(&mutex_pool, &queue_pool, msg);
    }
    util_cpu_timer_stop(&r_stop);
    util_time_timer_stop(&t_stop);
    util_time_elapsed(&t_start_total, &t_stop, &t_elapsed_total);
    util_time_elapsed(&t_start_data, &t_stop, &t_elapsed_data);
    util_cpu_timer_busy(&r_start, &r_stop, &t_elapsed_data, &busy);

    if (!bm) {
        print_elapsed("", &t_elapsed_total);
        print_elapsed(" (data)", &t_elapsed_data);
    }
    print_rate(bm, "", bidir ? 2 * loop : loop, dsize, &t_elapsed_data, busy);
    return NULL;
}
Пример #2
0
void *thread_srv_fun(void *arg) {
    int  inx;
    Msg *msg;

    arg = arg; // touch

    for (inx = 0; inx < loop; inx++) {
        cv_wait(&cv_srv);
        msg = msg_queue_remove(&mutex_srv, &queue_srv);
        assert(msg != NULL);
        if (!nocopy) {
            if (csize)
                memcpy(recv_buffer2, msg->cbuf, csize);
            if (dsize)
                memcpy(recv_buffer, msg->dbuf, dsize);
        }
        if (csize)
            free(msg->cbuf);
        if (dsize)
            free(msg->dbuf);
        if (bidir) {
            if (csize)
                memcpy(send_buffer2, recv_buffer2, csize);
            if (dsize)
                memcpy(send_buffer, recv_buffer, dsize);
        }
        msg_queue_add(&mutex_cli, &queue_cli, msg);
        cv_signal(&cv_cli);
    }
    return NULL;
}
Пример #3
0
void
msg_queue_destroy (struct msg_queue *queue)
{
  while (queue->length > 0)
    msg_queue_remove (queue);
  xfree (queue);
}