static struct bthread_info *btree_thread_ui_create(void) { int i; struct bthread_info *bi = (struct bthread_info*)calloc(1, sizeof(struct bthread_info)); assert(bi); bi->free_queue = mq_create(MAX_BUF, 1); index_init(); for (i = 0; i < MAX_THREAD; i++) { bi->node[i].id = i; bi->node[i].count = 0; bi->node[i].eof = 0; bi->node[i].bi = bi; bi->node[i].info_queue = mq_create(MAX_BUF, 0); strcpy(bi->node[i].tmpfile, "/tmp/mem_XXXXXX"); mkstemp(bi->node[i].tmpfile); bi->node[i].store = store_open_disk(bi->node[i].tmpfile, sizeof(struct user_info), 102400); // bi->node[i].store = store_open_memory(sizeof(struct user_info), 102400); // bi->node[i].tree = avlbtree_new_memory(bi->node[i].store); bi->node[i].tree = sbtree_new_memory(bi->node[i].store); pthread_mutex_init(&bi->node[i].mutex, NULL); pthread_create(&bi->node[i].thread, NULL, (void *(*)(void*))insert_thread, bi->node + i); } return bi; }
int main(void) { struct CArrayIOArgs carray_args; struct EncoderArgs encoder_args; struct DecoderArgs decoder_args; struct HistogramArgs histogram_args; // Create mqs for the encoding process carray_args.mq_recv = "/decoder_out"; carray_args.mq_send = "/encoder_in"; carray_args.data = (unsigned char*)text; carray_args.len = text_len; encoder_args.mq_recv = "/encoder_in"; encoder_args.mq_send = "/enc2dec"; encoder_args.mq_histogram_send = "/histogram_in"; encoder_args.mq_histogram_recv = "/histogram_out"; histogram_args.mq_recv = "/histogram_in"; histogram_args.mq_send = "/histogram_out"; mq_create(encoder_args.mq_send, BLOCK_SIZE); mq_create(encoder_args.mq_recv, BLOCK_SIZE); mq_create(encoder_args.mq_histogram_send, BLOCK_SIZE); mq_create(encoder_args.mq_histogram_recv, BLOCK_SIZE); // Create mqs for the encoding process decoder_args.mq_recv = "/enc2dec"; decoder_args.mq_send = "/decoder_out"; mq_create(decoder_args.mq_send, BLOCK_SIZE); //mq_create(decoder_args.mq_recv, BLOCK_SIZE); // Create and join the threads mkthread(&encoder_thread, encoder_entry, &encoder_args); mkthread(&decoder_thread, decoder_entry, &decoder_args); mkthread(&carray_thread, carray_io, &carray_args); mkthread(&histogram_thread, histogram_entry, &histogram_args); pthread_join(encoder_thread, NULL); pthread_join(carray_thread, NULL); pthread_join(decoder_thread, NULL); pthread_join(histogram_thread, NULL); return 0; }
int main(void) { message_queue *q = mq_create(); message_node *n = NULL; printf("size should be 0, is %d\n", mq_size(q)); mq_push_msgz(q, "one"); mq_push_msgz(q, "two"); mq_push_msgz(q, "three"); printf("size should be 3, is %d\n", mq_size(q)); n = mq_pop(q); printf("expecting \"one\", got \"%s\"\n", n->message); mn_destroy(n); mq_push_msgz(q, "four"); n = mq_pop(q); printf("expecting \"two\", got \"%s\"\n", n->message); mn_destroy(n); n = mq_pop(q); printf("expecting \"three\", got \"%s\"\n", n->message); mn_destroy(n); printf("size should be 1, is %d\n", mq_size(q)); n = mq_pop(q); printf("expecting \"four\", got \"%s\"\n", n->message); mn_destroy(n); printf("size should be 0, is %d\n", mq_size(q)); n = mq_pop(q); printf("expecting \"%p\", got \"%p\"\n", NULL, n); mq_destroy(q); return 0; }
int mq_test() { #define NO_MSG_TEST (100) MessageQueue_t *queue = mq_create(); //Message_t msgs_[NO_MSG_TEST]; uint16_t i; LOG("-----------Message Queue Basic Test------------"); LOG("Adding %d messages to the queue", NO_MSG_TEST); for (i = 0; i < NO_MSG_TEST; i++) { LOG(" - queue message %d", i); //Message_t *msg = &msgs_[i]; Message_t *msg = (Message_t*) malloc(sizeof(Message_t)); mq_queue_message(queue, msg); } LOG("Having %d messages in the queue:", queue->no_messages); for (;queue->no_messages > 0;) { Message_t *msg = mq_dequeue_message(queue); LOG(" - dequeue message 0x%X", msg); } LOG("Now we have %d messages, (deque_head==queue_head) = %d\n", queue->no_messages, queue->dequeue_head == queue->queue_head); return 1; }