小编jde*_*ers的帖子

在D中的线程之间共享屏障

我有一段时间试图让D中的屏障同步正常工作.我目前没有得到任何编译器错误,但每次它到达障碍时我都会遇到分段错误.这基本上就是我所拥有的:

import std.stdio;
import std.conv;
import std.concurrency;
import core.thread;
import core.sync.barrier;

//create barrier
Barrier barrier;

void the_thread()
{
    barrier.wait(); //I get a segmentation fault here
}

void main(string[] args)
{
    int threads = to!int(args[1]); //number of threads

    //init barrier
    barrier = new Barrier(threads);

    //launch threads
    foreach(i; 0 .. threads)
    {
       spawn(&the_thread);
    }
    thread_joinAll();
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试在main函数中完全定义了屏障,但是dmd抱怨:

static assert  "Aliases to mutable thread-local data not allowed."
Run Code Online (Sandbox Code Playgroud)

我也尝试将它作为共享变量传递,我得到了这个:

non-shared method core.sync.barrier.Barrier.wait is not callable using a shared object
Run Code Online (Sandbox Code Playgroud)

synchronization d dmd barrier

5
推荐指数
1
解决办法
133
查看次数

标签 统计

barrier ×1

d ×1

dmd ×1

synchronization ×1