On Monday, 12 November 2018 at 16:29:24 UTC, helxi wrote:



Looks like worker needs an int and spawn(&worker, i * 10) seems to feed it's second arg to worker(?)

spawn is a template that takes a function pointer and a variable number of parameters. Both the pointer and the parameters are passed on to an internal _spawn function.

https://github.com/dlang/phobos/blob/master/std/concurrency.d#L446

_spawn is has the same template parameters as spawn. It has an internal function that actually makes the call to the function pointer (fn):

    void exec()
    {
        thisInfo.ident = spawnTid;
        thisInfo.owner = ownerTid;
        fn(args);
    }

https://github.com/dlang/phobos/blob/master/std/concurrency.d#L538

A few lines down from there, a pointer to exec is passed to either scheduler.spawn or the Thread constructor. When it's ultimately called, your function will be called in turn.

At any rate, the actual call to the function pointer is fn(args).

Reply via email to