Мне интересно, как я могу передать волокно нитку?Как передать волокно в нитку?
Единственный способ, которым это удалось сделать, это отличить от shared
.
auto fiber = new Fiber((){
});
auto t = spawn((){
auto fib = cast(Fiber)receiveOnly!(shared(Fiber));
writeln("fib");
fib.call();
});
send(t, cast(shared(Fiber))fiber);
Но это не кажется правильным. Я думаю, что я не совсем понимаю последствия shared
.
Мне нужно было передать волокно в общий доступ, потому что мне не разрешалось отправлять его в поток без него. Мне пришлось отбросить его обратно на волокно, потому что я не мог позвонить Fiber.call
на общем волокне.
Каков правильный способ передачи Fiber
в поток?
ли документация не так? «Обратите внимание, что нет необходимости связывать волокно с одним конкретным потоком. Скорее, волокна могут свободно проходить между потоками, пока они не выполняются». –
Это не так (прямо сейчас), потому что вы все равно можете использовать общий (Fiber) со всеми последствиями, но он разбивает систему типов D, поэтому возможно, что она будет распущена в будущем. – Kozzi11
Документация была написана так, потому что первоначально Уолтер хотел ее поддержать. Однако некоторые крупные коммерческие пользователи D (Sociomantic и weka.io) очень противятся этому, и есть сильный толчок к изменению спецификации, чтобы запретить ее навсегда. –