2008년 07월 15일
DrScheme(PLT-Scheme)에서 병행성(concurrency) 프로시저 작동시키기
앞에 이 글을 적었습니다.
'MIT/GNU Scheme - Windows 사용법'
MIT/GNU Scheme를 실행시킨 이유는 바로 parallel-execute 프로시저 때문이었습니다.
하지만 돌리니 그런 변수는 없다는 황당한 메시지를 띄우네요.;;
![c20[2]](http://pds9.egloos.com/pds/200807/15/60/c0049460_487cb39fd4bfe.png)
그리하여 좌절하고 있던 중 구글 검색을 하니
DrScheme에 확장판으로 제공되고 있음을 알았습니다.
혹시나 하는 생각에 실행을 시켜보았습니다.
![c21[3]](http://pds9.egloos.com/pds/200807/15/60/c0049460_487cb34b469a0.png)
방법은 제일 앞에
(require (planet "sicp-concurrency.ss" ("dyoo" "sicp-concurrency.plt" 1 1)))
라는 코드를 넣기만 하면 됩니다.
두 개의 프로세스가 잘 나오는군요.;;;;
혹시나 해서 그 다음으로 나오는 make-serializer도 돌려보았습니다.
![c23[2]](http://pds9.egloos.com/pds/200807/15/60/c0049460_487cb34bbbc3a.png)
이것도 문제 없이 잘 되더군요.OTL...

거기에 책에 나오는 코드를 돌려보니 그 결과도 제대로 나옵니다.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 | 2008/07/15 23:25 | in OCW | 트랙백 | 덧글(0)















☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]