|
오늘 회사 노는 날인데.... 심심해서 나와서.. 약간의 실험을 했습니다. ㅋㅋㅋㅋ
이런 것들이 프로그램의 효율을 높이지요... ㅋㅋㅋㅋ
쓰레드를 거의 사용할 일이 없어서... 아니면 잘 익숙하지 않아서...
잘 사용하지 않았는데... 요즘은 이것을 사용하지 않고는 도저히 풀밍이
불가능함으로 사용하고 있습니다.
사용하면서.... 약간의 의문이 발생해서.....
GUI나 문자열 외에 Form1의 public으로 선언된 int, char 같은 경우는
쓰레드에서 아래와 같은 구조를 취할 필요가 없을 것 같은데.... 여러분의 의견은 ???
EnterCriticalSection(&CriticalSection);
Form1->iNum = ....
LeaveCriticalSection(&CriticalSection);
물론 쓰레드에서는 값을 집어 넣기만 하고...
Form1(Main thread라고 할까?)에서는 한번씩 참고만 할 뿐일 경우....
그리고 실험을 해보지 않았지만 다른 쓰레드에서 동시에 변수에 쓴다고 해도
문제가 발생하지 않을 것이라 생각합니다.(에라 실험 coding 약간 함)
int나 char 4byte 1byte 뭐 2byte도
현재 사용하는 PC는 386 이상으로 모든 처리는 32Bit(4Byte)로 동작합니다.
그러므로 이런 변수에 쓰레드에서 값을 바꾼다고 해도 한 메모리 4Byte 내에서는 다
른 값과 짬봉되지 않을 것이라 생각합니다.
1번 쓰레드에서 s라는 변수에 0x2040을 넣었다.
2번 쓰레드에서 s라는 변수에 0x3060을 넣었다.
위의 2 쓰레드를 실행해 두었다. 다른 쓰레드에서 값을 읽어본다.
s 변수에 0x2060이나 0x3040 이런 씩으로 절대로 들어가지 않을 것이라 생각합니다.
글을 쓰다가 쓰레드를 만들어 돌려 놓았는데... 아직 이런 현상 없음....
오전에 문자열 갇고 놀았는데... 크기를 1000Byte random으로 1문자를 선택해서...
채우기 했더니... 간혹 한번씩 문자열이 썪이는 것을 발견했습니다...
당연하지요....
그렇지만 좌표와 같이... 화면 좌표 또는 지도 좌표와 같은 꼭 동시에 두 값이 필요할 경우.... 그외 동시에 필요한 정보는 아래와 같이 해야겠지요. 그렇지 않으면 아주 간혹 약간의 문제가 발생할 수 있습니다. 물론 이 좌표를 이용해서 그림을 그린다고 볼 때... 그냥 문자로 화면에 잠시잠시 보여 줄 경우에는 사용하지 않아도 아무른 이상이 없겠죠.... 금방 갱신이 될 것이기 때문에....
EnterCriticalSection(&CriticalSection);
Form1->x = ....
Form1->y = ....
LeaveCriticalSection(&CriticalSection);
다른 의견이나 실험한 것이 있으면 답변 달아주시면... 감사하겠습니다...
부산에서 박영목... 올렸습니다.
|