gpt4 book ai didi

multithreading - D 语言 - 线程与生成

转载 作者:行者123 更新时间:2023-12-04 01:06:14 24 4
gpt4 key购买 nike

我正在尝试使用 D 进行编程,但遇到了一些问题。我开始使用 core.thread Thread 类,它支持启动一个线程,然后将当前线程加入它。 D 似乎希望人们使用消息传递而不是锁定/同步方法,所以我想我会尝试一下,但是我看到的每个消息传递示例都需要我似乎无法从 Thread 类中获得的 tid。我在网上看到的代码示例实际上使用了 spawn ,它返回 tid 而不是使用 Thread 包装器,然后您使用 tid 将消息传递给 Thread。但是现在似乎没有任何方法可以根据其 tid 加入线程!不仅如此,您似乎无法生成委托(delegate),这需要我添加不必要的间接级别。

所以我的问题首先是,为什么会有两种完全不同的线程?其次,为什么它们在一起时都如此不完整,它们基本上提供了您可能需要的一切?

最佳答案

core.thread为线程提供基本的低级原语。 std.concurrency使用 core.thread内部。一个 tid只能从 std.concurrency.spawn 获得.

So my question is first of all, why are there two completely different flavors of threading?



你不妨问,为什么有两种写代码的方式,普通D和内联汇编代码。有高(er)级和低级。

And second of all, why are they both so incomplete when together they provide basically everything you could need?



它们不是不完整的,但您的多线程必须设计为可以在其中一个或另一个中工作。如果 std.concurrency允许任意访问 Thread s等等,它做出的保证可能没有那么强。

要回答您更具体的问题,请调用 function而不是 delegate因为一个 delegate接受一个上下文指针,它允许突变,这会破坏一些 std.concurrency的假设。请注意 spawn不允许具有可变间接性的参数,因此没有代表的事情不应该令人震惊。

而不是加入,您将向您的线程发送“停止”消息。同样,这是更高级别,并使用更高级别的构造。

关于multithreading - D 语言 - 线程与生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9505294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com