2014-06-26 102 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問題。 –