uint nw_cons(future *fut) { printf("cons"); /*int i, status; status = future_get(fut, &i); if (status < 1) { printf("future_get failed\n"); return -1; } printf("it produced %d (Consumer PID : %d)\n", i, currpid); if(fut->flag == FUTURE_EXCLUSIVE){ future_free(fut); }else if(fisempty(fut->get_queue)){ future_free(fut); } return OK;*/ int i, status; status = future_get(fut, &i); if (status < 1) { printf("future_get failed\n"); return -1; } printf("It produced : %d \n", i); if(fut->flag == FUTURE_EXCLUSIVE){ future_free(fut); return OK; } if(fisempty(fut->get_queue)){ future_free(fut); } return OK; }
uint future_cons(future *fut) { //kprintf("tid = %d\n",gettid()); int i, status; status = future_get(fut, &i); if (status == SYSERR) { printf("future_get failed\n"); return -1; } kprintf("consumed %d\n", i); if(fut->flag == FUTURE_EXCLUSIVE){ if(future_free(fut)==SYSERR){ printf("future_free failed\n"); } } return OK; }
static int run_test(int nthreads) { struct benchmark_data * bdata = start_benchmark(); struct thread_pool * threadpool = thread_pool_new(nthreads); struct arg2 args = { .a = 20, .b = 22, }; struct future * sum = thread_pool_submit(threadpool, (fork_join_task_t) adder_task, &args); uintptr_t ssum = (uintptr_t) future_get(sum); future_free(sum); thread_pool_shutdown_and_destroy(threadpool); stop_benchmark(bdata); // consistency check if (ssum != 42) { fprintf(stderr, "Wrong result, expected 42, got %ld\n", ssum); abort(); } report_benchmark_results(bdata); printf("Test successful.\n"); free(bdata); return 0; } /**********************************************************************************/ static void usage(char *av0, int exvalue) { fprintf(stderr, "Usage: %s [-n <n>]\n" " -n number of threads in pool, default %d\n" , av0, DEFAULT_THREADS); exit(exvalue); }
void promise_test (bool verbose) { printf (" * promise: "); // @selftest // Test promise is fulfilled. pthread_t thread1; promise_t *promise1 = promise_new (); future_t *future1 = promise_get_future (promise1); pthread_create (&thread1, NULL, test_fulfill_thread, (void *) promise1); char *value = (char *) future_get (future1); assert (streq (value, "value")); free (value); pthread_join (thread1, NULL); promise_destroy (&promise1); future_destroy (&future1); // Test promise is rejected. pthread_t thread2; promise_t *promise2 = promise_new (); future_t *future2 = promise_get_future (promise2); pthread_create (&thread2, NULL, test_reject_thread, (void *) promise2); future_wait (future2); assert (future_is_resolved (future2)); assert (future_is_fulfilled (future2) == false); assert (future_rejected_code (future2) == -1); pthread_join (thread2, NULL); promise_destroy (&promise2); future_destroy (&future2); // @end printf ("OK\n"); }
void service_with_special_namesSvIf::async_tm_get(std::unique_ptr<apache::thrift::HandlerCallback<int32_t>> callback) { apache::thrift::detail::si::async_tm(this, std::move(callback), [&] { return future_get(); }); }