source: doc/papers/ibm_CASCON19/client.cfa @ d895e32

ADTast-experimentalpthread-emulation
Last change on this file since d895e32 was 487198c, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

Apparently forgot to commit the CASCON19 presentation

  • Property mode set to 100644
File size: 1.0 KB
RevLine 
[487198c]1// Original
2void sum_many_async(int[] inputs, lambda_t callback);
3
4// Target
5int  sum_many      (int[] inputs);
6
7//==================================
8
9int  sum_many(int[] inputs) {
10        // setup required data
11        int result;
12        semaphore_t sem = { 0 };
13
14        // call async function
15        sum_many_async( inputs, (int sum) {
16                result = sum;
17                V(sem);
18        });
19
20        // wait for result
21        P(sem);
22
23        // return
24        return result;
25}
26
27
28int sum_many_block(int[] inputs);
29int sum_many      (int[] inputs);
30
31//==================================
32
33struct request_t {
34        int[] inputs;
35        int result;
36        semaphore_t sem = { 0 };
37};
38
39void * call_sum_many_block(void * args) {
40        request_t * req = (request_t *) args;
41        req->result = sum_many_block(req->inputs);
42        V(req->sem);
43}
44
45int  sum_many(int[] inputs) {
46        // setup required data
47        request_t req = { inputs };
48
49        // create thread to
50        pthread_t thrd;
51        int err = pthread_fork(&thrd, 0p, call_sum_many_block, &req);
52        handle(err);
53
54        // wait
55        P(req.sem);
56
57        // Cleanup pthread
58        err = pthread_join(&thrd, 0p);
59        handle(err);
60
61        // get result
62        return req.result;
63}
Note: See TracBrowser for help on using the repository browser.