* Fork/Join Framework Copyright By PowCoder代写 加微信 powcoder #include #include “threadpool.h” /* Data to be passed to callable. */ * A FJ task that multiplies 2 numbers. static int #define NTASKS 200 bool success = true; main(int ac, char *av[]) return run_test(nthreads); 程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com
* Tests running multiple tasks.
* Written by G. Back for CS3214 Fall 2014.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “threadpool_lib.h”
#define DEFAULT_THREADS 1
struct arg2 {
uintptr_t a;
uintptr_t b;
static void *
multiplier_task(struct thread_pool *pool, struct arg2 * data)
return (void *)(data->a * data->b);
run_test(int nthreads)
struct benchmark_data * bdata = start_benchmark();
struct thread_pool * threadpool = thread_pool_new(nthreads);
struct future *f[NTASKS];
struct arg2 *args[NTASKS];
for (i = 0; i < NTASKS; i++) {
args[i] = malloc(sizeof (struct arg2));
args[i]->a = i;
args[i]->b = i+1;
f[i] = thread_pool_submit(threadpool, (fork_join_task_t) multiplier_task, args[i]);
for (i = 0; i < NTASKS; i++) {
uintptr_t sprod = (uintptr_t) future_get(f[i]);
future_free(f[i]);
free(args[i]);
if (sprod != i * (i + 1))
success = false;
thread_pool_shutdown_and_destroy(threadpool);
stop_benchmark(bdata);
// consistency check
if (!success) {
fprintf(stderr, "Wrong result\n");
report_benchmark_results(bdata);
printf("Test successful.\n");
free(bdata);
/**********************************************************************************/
static void
usage(char *av0, int exvalue)
fprintf(stderr, "Usage: %s [-n
” -n number of threads in pool, default %d\n”
, av0, DEFAULT_THREADS);
exit(exvalue);
int c, nthreads = DEFAULT_THREADS;
while ((c = getopt(ac, av, “hn:”)) != EOF) {
switch (c) {
nthreads = atoi(optarg);
usage(av[0], EXIT_SUCCESS);