MoonNote

반응형

In the following code, the Init Values VI sets the value of the Additional Action global variable to TRUE. But when you run this VI, the Additional Action VI does not execute. Why?

1. The Case structure has been constant folded.

2. The Init Values VI is reentrant and addressing a different instance of the global variable.

3. The global VI is broken.

4. There is no data dependency between when the global is written and when it is read.


정답 보기는 아래 더보기 클릭

 

 

 

더보기

정답 : 4. There is no data dependency between when the global is written and when it is read.

이미지 속 코드를 실행하였을 때 글로벌 변수(Additional Action)를 Init Values.vi에서 'TRUE'로 변경해주었는데도 불구하고 참 케이스가 돌지 않은 현상에 대해 물어보는 문제이다. LabVIEW는 기본적으로 좌에서 우로, 위에서 아래로의 데이터 흐름 방식을 권장하고 있다. 에러 와이어링이 된 것을 보면 케이스 구조 실행 전 Init Value.vi가 실행되었을 것이므로 글로벌 변수(Additional Action)에 'TRUE' 값 설정이 되었다고 생각할 수 있는데 이 부분이 맞다고 여기고 답을 고르면 틀리는 문제라고 보면 된다.

에러 와이어링으로 Main.vi에서 실행되는 vi 및 케이스 구조에 대해서는 sequence가 잡혀있으나, 실제 글로벌 변수(Additional Action) 쓰기와 읽기 동작에 대해서는 따로 와이어링이나 순서가 잡혀있지 않다. 즉, 서로 의존성이 없다할 수 있겠다. 따라서 문제의 핵심은 글로벌 변수(Additional Action)의 쓰기와 읽기의 순서를 판별하는 것인데 Main.vi에서 ¹Init Values.vi와 ²글로벌 변수(Additional Action) 읽기 중 무엇이 먼저 실행될지 생각해보면 된다. 여기서 경합 조건(Race Condition)이 발생하는데 따로 와이어링이나 강제 시퀀스가 잡혀있지 않으므로 다음 2가지로 생각해볼 수 있다.

1) 글로벌 변수(Additional Action) 읽기가 먼저 실행되어 'FALSE' 값을 Main.vi로 불러오고 뒤에 Init Values.vi가 실행된 경우
2) Init Values.vi가 먼저 실행되고(글로벌 변수에 TRUE 값 설정) 그 다음으로 글로벌 변수(Additional Action) 읽기가 실행된 경우

1)의 경우라면 문제에서 언급한 Init Values.vi에서 'TRUE'로 변수 설정을 해주었음에도 불구하고 사전에 읽기 동작에서 'FALSE' 값을 불러온 상태이므로 거짓 케이스가 돌게되어 Additional Action.vi는 실행되지 않는다.

따라서, 정답은 4. There is no data dependency between when the global is written and when it is read.이다.

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band