2012-11-20 18 views
5

Nella sezione SICP 3.4 (serializzatori nello schema) in valuta è presente una procedura denominata parallel-execute descritta ma non implementata nello schema MIT. Mi chiedo se qualcuno lo abbia effettivamente implementato; se no, come si potrebbe iniziare a implementare tale procedura?implementare l'esecuzione parallela nello schema

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-23.html#%_sec_3.4.1

+0

Per implementare quello si sarebbe costruito al livello dell'interprete meta-circolare. –

risposta

5

Ecco come ho implementato parallel-execute per risolvere gli esercizi in sezione 3.4 della SICP, utilizzando Racket:

(define (parallel-execute . procs) 
    (map thread-wait 
     (map (lambda (proc) (thread proc)) 
      procs))) 

Non posso garantire che esso ha la stessa semantica della procedura parallel-execute definito nel libro, ma mi ha permesso di risolvere gli esercizi.

+0

Qual è lo scopo dell'utilizzo di thread-wait? – Mark

+0

@Mark waiting 'fino a quando tutti i thread hanno finito il loro lavoro prima di continuare con l'esecuzione –

1

In GNU Guile la procedura è implementata come parallel. È definito come un modulo speciale e disponibile da (use-modules (ice-9 threads)). Se vuoi implementarlo tu stesso, puoi dare un'occhiata al codice sorgente di questo modulo.

3

Il sito ufficiale di questo libro offre un attrezzo parallel.scm. aperto Schema MIT come questo:

mit-scheme -load PATH/parallel.scm 

o mettere questo

(load "PATH/parallel.scm") 

a capo del file di origine schema.

1

In realtà è possibile caricare tutte le implementazioni necessarie nella racchetta con il seguente pacchetto. Basta digitare questo nella finestra delle definizioni o delle interazioni e il pacchetto necessario verrà installato e quando ne avrai bisogno, includi lo stesso commento nella finestra delle definizioni:

(require (planet dyoo/sicp-concorrenza: 1: 2/sicp-concorrenza))