본문 바로가기
코스웨어/13년 스마트컨트롤러

130709 화 정리 - 조유진

by 알 수 없는 사용자 2013. 7. 9.
728x90
반응형

 스레드는 하나의 프로세스가 여러 개의 작업을 동시에 실행하는 단위 중 하나입니다. 작업을 분업화 하여 더 좋은 효율을 얻을 수 있습니다.

오늘은 서버를 스레드오 ㅏ 접목하여 랑데뷰 소켓이 자동으로 커뮤니케이션 소켓을 받아오게끔 하였습니다.


server.c


pthread_mutex_lock(&MLock); // 크리티컬 영역에 락을 건다

stTempInfo.uiUser = uiUser; // 공유된 자원.

pthread_create(&tID[uiUser], 0, ClientRecv, &stTempInfo); // 스레드 생성 및 실행

++uiUser; // 공유된 자원.

pthread_mutex_unlock(&MLock); // 크리티컬 영역에 락을 푼다

..
pthread_mutex_lock(&MLock);    // 크리티컬 영역에 락
--uiUser;    // 공유된 자원
tID[uiMyUser] = tID[uiUser];    // 공유된 자원. 사용자가 나갔을 때를 처리해 준다.
pthread_mutex_unlock(&MLock);    // 크리티컬 영역 언락.


 스레드들은 동작이 예상하기 힘듭니다. 그냥 지멋대로 동작하다보니 스레드1/스레드2/스레드3을 순서대로 동시에 실행하더라도 스레드 1이 3보다 먼저 실행될 수도, 늦게 실행될 수도 있고요. 또한 전역변수의 경우 여러 곳에서 접근하면 예상하지 못한 동작을 하거나 올바르지 않은 값이 들어갈 수 있습니다. 때문에 스레드에서 동기화는 매우 중요합니다.


 쌤이 언급하신 것 중 뮤텍스와 세마포어가 있었는데, 이는 쌤이 말씀하셨다시피 컴공이면 몇번 들었을법한 내용입니다.

참고로 세마포어는 항구에서 배가 있는지 없는지 알기 위해 설치하는 깃발을 말하는 걸로 알고 있습니다.

왠지 규남오빠가 잘 알고 계실 것 같으니 가서 여쭤보세여. 주로 운영체제 등의 과목에서 꼭 언급되는 부분이고 인터넷에 되게 많이 나올 것 같습니다.


임계영역(크리티컬섹션, 공유자원을 접근하는 영역)에서 작업들이 바르게 접근하기 위해 고안된 것인데, DB같은데선 트랜젝션이라 하는걸로 알고 있음

대표적인 예로는 판독기와 기록기라던지 구매자 판매자 같은 예가 있는데, 판독기가 판독하는 동안 기록할 수 없으며 기록기가 기록하는 동안 판독할 수 없습니다. 이와 같이 함께 접근하면 문제가 생기는 부분을 서로 잘 격리하여 정상적으로 접근하게 만드는 것입니다.

이걸 이론과 코드로 어느 정도 배우긴 했는데 실제로 쓰는건 처음보네요.ㄷㄷ;

기본 구조는 이런 느낌입니다. 학교 강의 자료에서 쌔벼왔어요. 참고하세여



728x90