c언어 병행 수행 하여 두개의 문장을 파싱 하여 출력 하는 프로그램
병행 수행 하여 두개의 문장을 파싱 하여 출력 하는 과제 입니다.
우선 책의 내용을 적겠습니다.
이 용어를 설명하기 위해 문자 C : = a - b를 생각 보자. 변수 a 와 b의 값들은 c의 새로운 값을 계산하기 위해 사용된다. 따라서, a와 b는 판독 세트에 속한다. c의 [예전의] 값은 문장에서 사용되지 않으며, 문장의 수행 결과에 의해 새로운 값이 설정된다. 따라서, c는 판독 세트가 아닌 기록 세트에 속한다.
R(c : = a -b) = {a,b}
W(c : = a -b) = {c}
문장 w : = c +1에 대한 판독 세트와 기록 세트는 다음과 같다.
R(w:=c+1)={c}
W(w:=c+1)={w}
R(si)와 W(si)의 교집합이 반드시 공집합일 필요는 없다. 예를 들어, 문장 x:=x+2에 대해
R(x:=x+2)=W(x:=x+2)={x}
가 된다.
또 하나의 예로써 문장 read(a)를 생각해 보자. 이 때에는 a에 입력되므로, a의 값이 변화된다. 그러므로 판독 세트와 기록 세트는
R(read(a))={}
W(read(a))={a}
가 된다.
두 개의 문장 s1과 s2가 병행하여 수행되면서도 같은 결과를 낳기 위해서는 다음의 세 가지 조건이 만족되어야 한다. 이 조건들은 Bernstein[1966]에 의해 처음 언급되어 Berstein의 조건이라고 불리워진다.
(1)R(s1)⋂W(2)={}
(2)W(s1)⋂R(2)={}
(3)W(s1)⋂W(2)={}
예를 들어, 문장 s1: a:=x+y와 s2: b:=z+1을 생각 해보자.
R(s1)={x,y}
R(s2)={z}
W(s1)={a}
W(s2)={b}
이기 때문에 위 두 문장은 병행하여 수행될수 있다. 그러나 s2는 s3: c:=a-b와 병행하여 수행될 수 없다 왜냐 하면
W(s2)⋂R(s3)={b},
이기 때문이다.
이것이 책에 있는 내용입니다. 함수적 알고리즘은 위와 같고 프로그램은 파일로 입출력을 받습니다. 출력값은 예를 들어
s1 a=3.5
s2 b=4.2
s3 c=a+b
s4 d=a+b
s5 e=c+d
출력(파일&화면)
1 input output
2 a
3 b
4 a,b c
5 c,d e
이런식으로 출력을 하는데 위에 책에 있는 것처럼 병행이 되는 것만 출력을 하고 병행이 안되는 문장이 들어가면 그냥 넘어 가고 다음 문장을 출력하게 하는 프로그램입니다.
어떻게 구현해야 할까요? 고수님 도와주시면 감사하겠습니다.
과제라...
판독세트, 기록세트란 것이 무슨 용어인지...
갑자기 김치하교수님이 떠오는건 왜인지...
어떤 책의 어떤 문제인지 알려주시면 더 쉽지 않을까요?
아무튼 [Lex & Yacc / 더그 브라운] 을 한번 흩어보시고
[ programming Languages and Methodologies / Schalkoff ] 를 보시면 원하시는 문제를 해결하실수 있을 것같네요.
ps. 두권 다 교보문고 강남점에서 팔더군요.
Hello World.
댓글 달기