D语言 - 线程与生成

时间:2012-02-29 19:22:14

标签: multithreading d

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

所以我的问题首先是,为什么有两种完全不同的线程风格?第二,为什么他们在一起提供基本上所有你需要的东西时都是如此不完整?

1 个答案:

答案 0 :(得分:9)

core.thread为线程提供了基本的低级基元。 std.concurrency在内部使用core.threadtid只能从std.concurrency.spawn获得。

  

所以我的问题首先是,为什么有两种完全不同的线程风格?

你不妨问一下,为什么有两种编写代码的方法,普通的D和内联汇编代码。有高(呃)水平和低水平。

  

其次,为什么他们在一起提供基本上所有你需要的东西时都是如此不完整?

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

要回答更具体的问题,需要function而不是delegate,因为delegate需要一个上下文指针,允许突变,这会破坏{{1} 1}}的假设。请注意std.concurrency不允许具有可变间接的参数,因此no委托事物不应该令人震惊。

而不是加入,你会向你的帖子发送一个“停止”消息。同样,这是更高级别,并使用更高级别的结构。