Threading challenge: calculate fib(45) while spinning
Imperatorn
johan_forsberg_86 at hotmail.com
Fri Oct 15 10:20:58 UTC 2021
On Friday, 15 October 2021 at 03:54:17 UTC, Ali Çehreli wrote:
> On 10/14/21 8:35 PM, jfondren wrote:
>> [...]
>
> Here is one that uses receiveTimeout and OwnerTerminated:
>
> import std.stdio;
> import std.concurrency;
> import core.thread;
>
> void main() {
> spawnLinked(&spinner, 100.msecs);
> enum n = 45;
> const fibN = fib(n); // slow
> writefln!"\rFibonacci(%d) = %d"(n, fibN);
> }
>
> void spinner(const(Duration) delay) {
> for (;;) {
> foreach (r; `-\|/`) {
> writef!"\r%c"(r);
> stdout.flush();
> bool done;
> receiveTimeout(delay,
> (OwnerTerminated msg) {
> done = true;
> });
> if (done) {
> return;
> }
> }
> }
> }
>
> auto fib(int x) {
> if (x < 2) {
> return x;
> }
> return fib(x-1) + fib(x-2);
> }
>
> Ali
This is a "similar" approach to what Erlang does. I have always
liked it ☀️
More information about the Digitalmars-d-learn
mailing list