2014-06-26 103 views
4

我想在Racket中编写一个多线程程序,实际上它使用多个进程共享内存空间,如C中的pthread。Racket提供了“线程”,但它只使用一个进程来执行多个线程。它还提供了通过在多个进程上运行的命令行执行新程序的“子进程”,但这些程序不能共享相同的内存空间。Racket支持多线程吗?

回答

4

不要这样做。

球拍提供parallelism via futures and places,但它们不提供(无限制)共享内存空间。如果您想要将数据从一个线程发送到另一个线程,请使用地点信道。

正如Greg Hendershott指出的那样,您可以通过地方频道发送共享矢量,该地点频道提供共享空间供您使用。 (但这与共享所有内存引用不同,这就是熟悉Java风格的线程所期望的内容,而后者就是我的“不这样做”所指的内容。)

如果你真的想使用pthread-like线程,Guile does provide them,但你不会再使用Racket。 ;-)

+0

尽管我自己并没有尝试过,但它看起来像是球拍场所可以使用[共享内存空间](http://docs.racket-lang.org/reference/places.html#%28tech。 _shared._memory._space%29)。 –

+0

@GregHendershott是的,但它比pthreads提供的更受限制的形式,这是OP要求的(他们是否真的需要它,是另一回事; XY问题以及所有问题)。 –

+2

是的。只是想指出,您可以通过频道发送的一件事是共享内存对象。好主意使用?通常不会。如果你真的需要的话可用吗?是。 IOW我同意XY问题。 –