C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[61899] Re:Re:Re:이상하네요...
Lyn [tohnokanna] 854 읽음    2010-07-14 19:38
애초에 Thread 생성갯수와는 전혀 관계 없습니다.

동시에 몇개가 임계영역 안으로 들어올 수 있느냐의 문제지
질문 님이 쓰신 글 :
: 제가 위에 질문중에 3번 답변달아주신 것중에 궁금한게 있어서 다시 질문 올립니다...
:
: 3번질문에 아래와 같이 답 달아주셨는데요
:
: 위와 같은 코드는 어차피 로컬변수(int i) 이므로 동기화 없이 아무리 쓰레드를 많이 돌려도 쫑날 일은 없습니다.
: : ( printf가 문제가 될 가능성은 좀 있어보입니다. )
: :
: : global 변수나 객체, 리소스를 여러쓰레드에서 동시에 접근할때 사용하라고 만든게
: : 동기화 객체들 입니다. 그런 용도로 쓰시면 됩니다.
: :
: : 세마포어는 단지 여러 쓰레드가 접근 해도 되는 리소스를 사용할때
: : 몇개까지 접근할 수 있도록 단지 동기화 처리를 해주는 것이지
: : 그게 3개가지 동시에 접근해도 문제가 안되게 하는 구조를 만드는 것은
: : 개발자 본인의 책임입니다.
: : 동시 접근할때 문제가 되게 만들어 놓고 세마포어를 쓰는것은 세마포어의 용도를 모르고 썼다는 얘기밖에 안됩니다.
:
: 실제 세마포어 쓸때는 전역 변수를 쓸겁니다..예제는 단순히 그냥 든거구요
: 근데
:
:  세마포어는 단지 여러 쓰레드가 접근 해도 되는 리소스를 사용할때
:  몇개까지 접근할 수 있도록 단지 동기화 처리를 해주는 것이지
:
: 요 부분이요...
: 뮤텍스도 여러개의 스레드를 만들어서 크리티컬 섹션 영역에 동기화해서 접근할 수있잖아요...
: 그러면 뮤텍스와 세마포어의 차이가 뭔가요???
:
: 세마포어는 스레드 접근 개수를 설정할 수 있다고 해서 전 동시에 접근 가능한 스레드의 수를 설정하는거라 생각했는데요
: 그럼 세마포어가 설정한 스레드의 개수는 혹시 무한데로 스레드가 접근할까봐 그걸 막기위해 스레드 수를 제한한건가요??
:
: 뮤텍스를 스레드 생성을 무한데로 만들고 싶은 만큼 만들 수 있는거고 세마포어는 최대 접근 가능한 스레드수를 제한해서
: 무한데로 스레드가 접근하는걸 막기위해 사용하는 건가요??
:
:
:
:
:
:
:
:
:
: 크레브 님이 쓰신 글 :
: : 질문 님이 쓰신 글 :
: : : 1. 뮤텍스 또는 세마포어의 매개변수 리스트 중 보안속성에 관한  것이있는데 이 보안속성이라는 것이
: : :    무엇인지..인터넷이나 책에서는 그냥 NULL값을 쓰라고 되어 있는데 좀 더 자세히 알고 싶습니다..
: :
: : 자세히 보지 않아서 모르겠습니다.
: :
: :
: :
: : : 2. 크리티컬 섹션은 하나의 동일한 프로세스내의 여러 스레드를 관리할 때 사용하고 뮤텍스는 다른 프로
: : :    세스내의  스레드도 관리 할 수 있다고 하는데 프로세스가 하나의 프로그램단위로 알고 있는데 그렇다면
: : :    우리가 exe 실행 파일을 만든다면 두 개의 exe 파일끼리 주고 받는 것을 말하는 건가요??
: :
: : 맞습니다.
: : :
: : :
: : : 3. 세마 포어에 대해 문의드립니다...
: : :    예를 들어 공통으로 사용되는 코드 내용이
: : :   
: : :    int i = 0;  ........... ①
: : :    i++;    ............... ②
: : :    printf("%d", i); ...... ③
: : : 
: : : 이런게 있다면..크리티컬 섹션이나 뮤텍스의 경우 예를 들어 A와 B라는 스레드가 있을 경우 A스레드가 ① ~ ③까지 수행하기   전까지 B 스레드는  접근하지 못하고 대기하고 있다고 A스레드가  ① ~ ③까지의 작업을 완료하면 그때서 B스레드가 다시  ① ~ ③까지 수행하는 거잖아요(위 아래로 lock, unlock 있다고 가정하에)
: : :
: : : 근데 세마포어는 동시에 여러개의 스레드가 접근할 수 있다고 하는데...예를 들어 3개까지 동시 접속을 허용했을 경우
: : : A, B, C라는 스레드가 있다고 가정했을 때 A라는 스레드가 ①부터 시작해서 ②을 수행중이라고 가정했을 때 B라는 스레드가  동시에 ①부터 다시 수행할 수있다는 건가요??
: : : 
: : : 근데 그렇게 되면 A라는 스레드가 ② 코드를 수행하여 i의 값을 1로 증가 시켰는데 다시 B라는 스레드가 ①의 기능을 수행한다면 i값을 0으로 만든다면 A스레드가 i값을 사용하는데 영향을 받지않게되나요??
: : : 
: :
: : 위와 같은 코드는 어차피 로컬변수(int i) 이므로 동기화 없이 아무리 쓰레드를 많이 돌려도 쫑날 일은 없습니다.
: : ( printf가 문제가 될 가능성은 좀 있어보입니다. )
: :
: : global 변수나 객체, 리소스를 여러쓰레드에서 동시에 접근할때 사용하라고 만든게
: : 동기화 객체들 입니다. 그런 용도로 쓰시면 됩니다.
: :
: : 세마포어는 단지 여러 쓰레드가 접근 해도 되는 리소스를 사용할때
: : 몇개까지 접근할 수 있도록 단지 동기화 처리를 해주는 것이지
: : 그게 3개가지 동시에 접근해도 문제가 안되게 하는 구조를 만드는 것은
: : 개발자 본인의 책임입니다.
: : 동시 접근할때 문제가 되게 만들어 놓고 세마포어를 쓰는것은 세마포어의 용도를 모르고 썼다는 얘기밖에 안됩니다.
: :
: :
: :
: :
: :
: :
: : : 세마포어는 각각 스레드 마다 값을 저장하는 장소(?)가 따로따로 주어주는 건가요?? 그래서 A스레드는 A스레드데로 값을  저장하고.. B스레는 B스레드 데로 값을 저장하고...C스레드는 C스레드데로 값을 저장하고 그런 형태인건가요??
: : : 
: : : 그렇다면 각각의 스레드가 자신들의 값은 스택에 저장해 놓는건가요?? 메모리에 별도의 공간이 생기는건가요??
: : : 
: : : 세마포어 실행 방식에 대해 설명 부탁드립니다 인터넷이나 책은 그냥 여러개의 스레드가 사용할 수 있도록 허용하는 것이다 라고만 나와있고 그 데이터 처리를 어떻게 하는지에 대한 부분이 없어서요.///

+ -

관련 글 리스트
61890 동기화 관련으로 조언부탁드립니다.. 질문 991 2010/07/14
61896     Re:동기화 관련으로 조언부탁드립니다.. 크레브 1083 2010/07/14
61898         Re:Re:이상하네요... 질문 899 2010/07/14
61899             Re:Re:Re:이상하네요... Lyn 854 2010/07/14
61900                 Re:Re:Re:Re:이상하네요... 질문 859 2010/07/14
61902                     Re:Re:Re:Re:Re:이상하네요... Lyn 903 2010/07/14
61901                     Re:Re:Re:Re:Re:이상하네요... 크레브 885 2010/07/14
61905                         Re:Re:Re:Re:Re:Re:이상하네요... 질문 943 2010/07/14
61906                             Re:Re:Re:Re:Re:Re:Re:이상하네요... 크레브 1065 2010/07/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.