2016-04-16 2 views
2

Мне интересно, как я могу передать волокно нитку?Как передать волокно в нитку?

Единственный способ, которым это удалось сделать, это отличить от 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 в поток?

ответ

3

Нет поддержки для перемещения волокон по нитям прямо сейчас (и, вероятно, никогда не будет). Использование shared может каким-то образом работать, но это опасно, и я не уверен, что он будет работать со всеми компиляторами. Некоторые подробнее в этом dlang теме форума:

http://forum.dlang.org/post/[email protected]

+0

ли документация не так? «Обратите внимание, что нет необходимости связывать волокно с одним конкретным потоком. Скорее, волокна могут свободно проходить между потоками, пока они не выполняются». –

+0

Это не так (прямо сейчас), потому что вы все равно можете использовать общий (Fiber) со всеми последствиями, но он разбивает систему типов D, поэтому возможно, что она будет распущена в будущем. – Kozzi11

+0

Документация была написана так, потому что первоначально Уолтер хотел ее поддержать. Однако некоторые крупные коммерческие пользователи D (Sociomantic и weka.io) очень противятся этому, и есть сильный толчок к изменению спецификации, чтобы запретить ее навсегда. –

 Смежные вопросы

  • Нет связанных вопросов^_^