我正在尝试使用D编程,我遇到了一些问题。我开始使用core.thread Thread类,它提供了启动线程然后将当前线程连接到它的支持。 D似乎希望人们使用消息传递而不是锁定/同步方法,所以我想我会尝试一下,但是我看到的每个消息传递示例都需要tid,我似乎无法从Thread类中获取。我在网上看到的代码示例实际上使用了spawn,它返回tid而不是使用Thread包装器,然后使用tid将消息传递给Thread。但现在似乎没有任何方法可以根据其tid加入线程!不仅如此,你似乎无法产生委托,这需要我添加一个不必要的间接层。
所以我的问题首先是,为什么有两种完全不同的线程风格?第二,为什么他们在一起提供基本上所有你需要的东西时都是如此不完整?
答案 0 :(得分:9)
core.thread
为线程提供了基本的低级基元。 std.concurrency
在内部使用core.thread
。 tid
只能从std.concurrency.spawn
获得。
所以我的问题首先是,为什么有两种完全不同的线程风格?
你不妨问一下,为什么有两种编写代码的方法,普通的D和内联汇编代码。有高(呃)水平和低水平。
其次,为什么他们在一起提供基本上所有你需要的东西时都是如此不完整?
它们并不完整,但您的多线程必须设计为在一个或另一个中工作。如果std.concurrency
允许任意访问Thread
等,那么它所做的保证可能不会那么强大。
要回答更具体的问题,需要function
而不是delegate
,因为delegate
需要一个上下文指针,允许突变,这会破坏{{1} 1}}的假设。请注意std.concurrency
不允许具有可变间接的参数,因此no委托事物不应该令人震惊。
而不是加入,你会向你的帖子发送一个“停止”消息。同样,这是更高级别,并使用更高级别的结构。