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();
}
私がメイン機能で完全にバリアを定義しようとしましたが、DMDは文句:
static assert "Aliases to mutable thread-local data not allowed."
私も共有変数とIとしてそれを渡して試してみましたこれを取得する:あなたがあなたのメインスレッドでbarrier
を設定し、あなただけのメインスレッドでそれを設定すると
non-shared method core.sync.barrier.Barrier.wait is not callable using a shared object
__gshared'が、それは(Windows上で)私のために働く可能 'などのバリアをマーク。 – sigod