www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Fiber cross threads terminated

reply mogu <mogucpp 163.com> writes:
Here's my code in main function:
```
     auto fiber = new Fiber({
         while (true) {
             Thread.sleep(1.seconds);
             Fiber.yield;
         }
     });

     void foo() {
         while (true) {
             fiber.call;
             //Thread.sleep(1.seconds);
             //"---".writeln;
         }
     }

     new Thread({
         foo();
     }).start;

     new Thread({
         Thread.sleep(500.msecs);
         foo();
     }).start;

```
If I comment the `fiber.call;`, all works.
system: ubuntu 16.04LTS
dmd version: 2.071.1
Sep 01 2016
parent reply Steven Schveighoffer <schveiguy yahoo.com> writes:
On 9/1/16 9:27 PM, mogu wrote:
 Here's my code in main function:
 ```
     auto fiber = new Fiber({
         while (true) {
             Thread.sleep(1.seconds);
             Fiber.yield;
         }
     });

     void foo() {
         while (true) {
             fiber.call;
             //Thread.sleep(1.seconds);
             //"---".writeln;
         }
     }

     new Thread({
         foo();
     }).start;

     new Thread({
         Thread.sleep(500.msecs);
         foo();
     }).start;

 ```
 If I comment the `fiber.call;`, all works.
 system: ubuntu 16.04LTS
 dmd version: 2.071.1
Fibers in D are not meant to be run in multiple threads. -Steve
Sep 01 2016
parent mogu <mogucpp 163.com> writes:
On Friday, 2 September 2016 at 01:53:58 UTC, Steven Schveighoffer 
wrote:
 On 9/1/16 9:27 PM, mogu wrote:
 Here's my code in main function:
 ```
     auto fiber = new Fiber({
         while (true) {
             Thread.sleep(1.seconds);
             Fiber.yield;
         }
     });

     void foo() {
         while (true) {
             fiber.call;
             //Thread.sleep(1.seconds);
             //"---".writeln;
         }
     }

     new Thread({
         foo();
     }).start;

     new Thread({
         Thread.sleep(500.msecs);
         foo();
     }).start;

 ```
 If I comment the `fiber.call;`, all works.
 system: ubuntu 16.04LTS
 dmd version: 2.071.1
Fibers in D are not meant to be run in multiple threads. -Steve
Thanks. I got it.
Sep 01 2016