|
질문 님이 쓰신 글 :
: 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스레드데로 값을 저장하고 그런 형태인건가요??
:
: 그렇다면 각각의 스레드가 자신들의 값은 스택에 저장해 놓는건가요?? 메모리에 별도의 공간이 생기는건가요??
:
: 세마포어 실행 방식에 대해 설명 부탁드립니다 인터넷이나 책은 그냥 여러개의 스레드가 사용할 수 있도록 허용하는 것이다 라고만 나와있고 그 데이터 처리를 어떻게 하는지에 대한 부분이 없어서요.///
|