이글루스 | 로그인  


DrScheme(PLT-Scheme)에서 병행성(concurrency) 프로시저 작동시키기

앞에 이 글을 적었습니다.

'MIT/GNU Scheme - Windows 사용법'

MIT/GNU Scheme를 실행시킨 이유는 바로 parallel-execute 프로시저 때문이었습니다.

하지만 돌리니 그런 변수는 없다는 황당한 메시지를 띄우네요.;;

 

c20[2]

그리하여 좌절하고 있던 중 구글 검색을 하니

DrScheme에 확장판으로 제공되고 있음을 알았습니다.

 

sicp-concurrency.plt

 

혹시나 하는 생각에 실행을 시켜보았습니다.

 

c21[3]

방법은 제일 앞에

(require (planet "sicp-concurrency.ss" ("dyoo" "sicp-concurrency.plt" 1 1)))

라는 코드를 넣기만 하면 됩니다.

 

두 개의 프로세스가 잘 나오는군요.;;;;

혹시나 해서 그 다음으로 나오는 make-serializer도 돌려보았습니다.

 

c23[2]

이것도 문제 없이 잘 되더군요.OTL...

 

c22

거기에 책에 나오는 코드를 돌려보니 그 결과도 제대로 나옵니다.OTL...

 

처음의 것은 두 프로세스가 마구 섞여 나오는 값입니다.

따라서 101, 121, 110, 11, 100이 나오지요.

하지만 두 번째 것은 줄을 세웠기에 뒤섞이지 않습니다.

따라서 121과 101만 나오는 것입니다.

 

 

약 두 시간 가량을 삽질했네요.OTL....

하지만 덕분에 Emacs에 대해 관심을 다시 가질 수 있게 되었습니다.

 

사실 리눅스를 쓰면서 처음에는 Vi를 사용하였습니다.

이유는 대학교 인터넷 프로그래밍 수업 때 가르쳐 준 프로그램이 Vi이기 때문입니다.

 

그러다 Vi는 명령어를 실행시키기 위해 :를 눌러야 하므로

그 귀차니즘에 Emacs로 넘어갔습니다.

 

한참을 잘 쓰다 Tab size를 조절하는 법을 도저히 찾지 못했습니다.

Tab size를 4로 맞추지 않으면 감점한다는 교수님의 조건에 충족시키기 위해

어쩔 수 없이 방법을 알아낸 Vi로 넘어가 사용하였습니다.

 

그 후 MIT Scheme 덕분에 다시 Emacs에 관심을 다시 가질 수 있었습니다.^^

(다만, 결과는 삽질이 되고 말았지만...)

 

오늘 SICP 문제를 풀려고 하였지만 그러지 못하고 말았습니다.ㅜㅜ

진도가 이렇게 느려서야... 어렵습니다.ㅜㅜOTL...

 

 

(require (planet "sicp-concurrency.ss" ("dyoo" "sicp-concurrency.plt" 1 1)))

(define (test-1)
  (define x 10)
  (parallel-execute (lambda () (set! x (* x x)))
                    (lambda () (set! x (+ x 1))))
  x)

(define (test-2)
  (define x 10)
  (define s (make-serializer))
  (parallel-execute (s (lambda () (set! x (* x x))))
                    (s (lambda () (set! x (+ x 1)))))
  x)

; execute
(test-1) (test-1) (test-1) (test-1) (test-1)
(test-1) (test-1) (test-1) (test-1) (test-1)

(newline)

(test-2) (test-2) (test-2) (test-2) (test-2)
(test-2) (test-2) (test-2) (test-2) (test-2)

by NoSyu | 2008/07/15 23:25 | in OCW | 트랙백 | 덧글(0)

트랙백 주소 : http://NoSyu.egloos.com/tb/4490418
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶