[code]프로세스[/code]
시그널
프로세스가 종료한 경우 프로세스가 활성화된 스레드를 하나도 갖고 있지 않거나 (모든 스레드가 ExitThread를 호출 했으면) 프로세스 안의 스레드가 ExitProcess 를 호출하면 프로세스가 종료하게 된다.
시그널안된것
프로세스가 적어도 하나의 활성화된 스레드를 갖고 잇는 경우
[code]스레드[/code]
시그널
스레드가 종료한 경우 스레드가 ExitThread 를 호출했거나 스레드 시작 프로시저에서 리턴 했거나 또는 TerminatedThread 가 스레드를 종료시켯을 경우
시그널안된것
스레드가 종료안된경우
[code]이벤트[/code]
시그널
SetEvent 와 PulseEvent 함수에 의해서 시그널 상태가 될 수 있다.
시그널안된것
자동 리셋 이벤트는 스레드가 이벤트에 대한 대기작업을 끝낸 후에 운영체제에 의해서 바로 리셋된다. (시그널되지 않은 상태로 된다.) 수동 리셋 이벤트는 반드시 ResetEvent를 ㄹ호출해서 명시적으로 시그널 되지 않은 상태로 만들어야 된다.
[code]뮤텍스[/code]
시그널
뮤텍스 객체가 컴퓨터의 cpu 에서 수행하고 있는 어떤 스레드에도 소유되지 않은 경우. 스레드는 뮤텍스의 소유권을 ReleaseMutex 함수를 호출해서 포기할 수 있다.
시그널안된것
뮤텍스를 소유한 스레드가 종료하지 않았거나, 자발적으로 뮤텍스를 해체하지 않는 경우, 대기한 후에 스레드가 성공적으로 뮤텍스를 획득한 경우에는 그 스레드에게 제어권을 넘겨주기 전에 운영체제가 뮤텍스를 시그널 되지 않는 상태로 만든다.
[code]세마포어[/code]
시그널
세마포어 객체와 관련된 카운트가 0보다 큰 경우, 세마포어의 초기값과 최대값은 세마포어가 CreateSemaphore 함수를 사용해서 생성될 때 지정된다. ReleaseSemaphore 함수는 주어진 세마포어의 카운트를 명확히 증가시키는 데 사용된다.
시그널안된것
세마포어의 카운트 값이 0인 경우 카운트가 0보다 클때 세마포어를 기다리고 있는 경우에는 wait함수가 카운트를 1만큰 감소시키고 즉시 리턴한다.
[code]변화공지[/code]
시그널
주어진 디렉토리나 트리에서 FindFirstChangeNotification 함수에서 지정한 변화가 발생한 경우
시그널안된것
입력 버퍼가 비어있는 경우, 콘솔의 입력 버퍼는 ReadFile, ReadConsole. ReadConsoleInput 함수 등을 사용해서 읽을 수 있다.
[code]콘솔입력[/code]
시그널
콘솔의 입력 버퍼에 읽지 않는 데이터가 있는 경우, 콘솔의 입력 버퍼는 WriteFile 이나 WriteConsoleInput 함수를 사용해서 쓸 수 있다.
시그널안된것
입력 버퍼가 비어 있는 경우 콘솔의 입력 버퍼는 ReadFile, ReadConsole, ReadConsoleInput 함수 등을 사용해서 읽을 수 있다.
[code]파일[/code]
시그널
파일이나 통신 디바이스에 대한 중복된 (overlapped) 읽기나 쓰기 작업이 운영체제에 의해서 충족된 경우 GetOverlappedResult 함수는 시그널되기 위한 파일 핸들을 기다리는데 사용될 수 있다. 통신 디바이스는 WaitCommEvent 함수를 주어진 통신 이벤트가 발생할 때까지 대기하도록 하는 데 사용할 수 있다.
시그널안된것
중복된 쓰기나 읽기가 파일이나 통신 디바이스에서 대기하고 있지 않는 경우, 통신 다바이스의 경우에는 SetCommMask 에 의해서 지정된 이벤트중의 하나가 발생할 때까지 파일이 시그널 되지 않은 상태로 남게 된다.
[code]파이프[/code]
시그널
파이프에 읽지 않는 데이터가 있는 경우, 주어진 파이프에 해당되는 쓰기 핸들을 이용해서 WriteFile 함수를 사용하면 파이프에 데이터를 써 넣을 수 있다.
시그널안된것
파이프가 비어있는 경우, 주어진 파이프에 해당되는 읽기 핸들을 이용하여 ReadFile 함수를 사용하면 파이프에 데이터를 읽을 수 있다.
[code]이름을 가진 파이프[/code]
시그널
이름을 가진 파이프에 읽지 않은 데이터가 있거나 클라이언트 애플리케이션은 WaitNamedPipe 함수로 파이프를 사용할 수 있을 때까지 대기할 수 있고 CreateFile 이나 CallnamedPipe 함수를 이용해서 이름을 가진 파이프에 연결할 수 있다.
시그널안된것
이름을 가진 파이프가 비었거나 이름을 가진 파이프에 접속하려는 클라이언트가 없는 경우, 이름을 가진 파이프의 데이터는 ReadFile, TransactNamedPipe 함수를 이용해서 읽을 수 있다. 서버는 서버쪽의 이름을 가진 파이프의 연결을 끊을 수 있고 DisconnectNamedPipe 함수를 호출해서 이 객체를 시그널 되지 않는 상태로 만들 수 있다. 또한 서버는 ConnectNamedPipe 함수를 사용해서 이름을 가진 파이프에 새로운 클라이언트가 접속할 때까지 대기할 수 있다.
[code]메일슬롯[/code]
시그널
메일 슬롯에 읽지 않은 데이터가 있는 경우. 클라이언트 프로세스는 WriteFile 함수를 이용해서 메일 슬롯에 데이터를 써넣을 수 있다.
시그널안된것
메일 슬롯이 빈 경우, 서버 프로세스는 ReadFile 함수를 이용해서 메일 슬롯에서 데이터르 읽을 수 있다.
[code]IO 완료 포트[/code]
시그널
완료 포트에 해당되는 파일에 대한 입력이나 출력 작업이 완료된 경우, 같은 프로세스 안의 스레드는 PostQueuedCompletionStatus 함수를 이용해서 I/O 완료 포트를 시그널된 상태로 만들 수 있다.
시그널안된것
완료 포트에 해당되는 파일에 대한 입력이나 출력 작업이 초기화 되고 종료될 때 까지의 경우 GetQueuedCompletionStatus 함수를 이용해서 주어진 I/O 완료 포트에 완료 공지가 발생할 때까지 대기할 수 있다.
시그널
프로세스가 종료한 경우 프로세스가 활성화된 스레드를 하나도 갖고 있지 않거나 (모든 스레드가 ExitThread를 호출 했으면) 프로세스 안의 스레드가 ExitProcess 를 호출하면 프로세스가 종료하게 된다.
시그널안된것
프로세스가 적어도 하나의 활성화된 스레드를 갖고 잇는 경우
[code]스레드[/code]
시그널
스레드가 종료한 경우 스레드가 ExitThread 를 호출했거나 스레드 시작 프로시저에서 리턴 했거나 또는 TerminatedThread 가 스레드를 종료시켯을 경우
시그널안된것
스레드가 종료안된경우
[code]이벤트[/code]
시그널
SetEvent 와 PulseEvent 함수에 의해서 시그널 상태가 될 수 있다.
시그널안된것
자동 리셋 이벤트는 스레드가 이벤트에 대한 대기작업을 끝낸 후에 운영체제에 의해서 바로 리셋된다. (시그널되지 않은 상태로 된다.) 수동 리셋 이벤트는 반드시 ResetEvent를 ㄹ호출해서 명시적으로 시그널 되지 않은 상태로 만들어야 된다.
[code]뮤텍스[/code]
시그널
뮤텍스 객체가 컴퓨터의 cpu 에서 수행하고 있는 어떤 스레드에도 소유되지 않은 경우. 스레드는 뮤텍스의 소유권을 ReleaseMutex 함수를 호출해서 포기할 수 있다.
시그널안된것
뮤텍스를 소유한 스레드가 종료하지 않았거나, 자발적으로 뮤텍스를 해체하지 않는 경우, 대기한 후에 스레드가 성공적으로 뮤텍스를 획득한 경우에는 그 스레드에게 제어권을 넘겨주기 전에 운영체제가 뮤텍스를 시그널 되지 않는 상태로 만든다.
[code]세마포어[/code]
시그널
세마포어 객체와 관련된 카운트가 0보다 큰 경우, 세마포어의 초기값과 최대값은 세마포어가 CreateSemaphore 함수를 사용해서 생성될 때 지정된다. ReleaseSemaphore 함수는 주어진 세마포어의 카운트를 명확히 증가시키는 데 사용된다.
시그널안된것
세마포어의 카운트 값이 0인 경우 카운트가 0보다 클때 세마포어를 기다리고 있는 경우에는 wait함수가 카운트를 1만큰 감소시키고 즉시 리턴한다.
[code]변화공지[/code]
시그널
주어진 디렉토리나 트리에서 FindFirstChangeNotification 함수에서 지정한 변화가 발생한 경우
시그널안된것
입력 버퍼가 비어있는 경우, 콘솔의 입력 버퍼는 ReadFile, ReadConsole. ReadConsoleInput 함수 등을 사용해서 읽을 수 있다.
[code]콘솔입력[/code]
시그널
콘솔의 입력 버퍼에 읽지 않는 데이터가 있는 경우, 콘솔의 입력 버퍼는 WriteFile 이나 WriteConsoleInput 함수를 사용해서 쓸 수 있다.
시그널안된것
입력 버퍼가 비어 있는 경우 콘솔의 입력 버퍼는 ReadFile, ReadConsole, ReadConsoleInput 함수 등을 사용해서 읽을 수 있다.
[code]파일[/code]
시그널
파일이나 통신 디바이스에 대한 중복된 (overlapped) 읽기나 쓰기 작업이 운영체제에 의해서 충족된 경우 GetOverlappedResult 함수는 시그널되기 위한 파일 핸들을 기다리는데 사용될 수 있다. 통신 디바이스는 WaitCommEvent 함수를 주어진 통신 이벤트가 발생할 때까지 대기하도록 하는 데 사용할 수 있다.
시그널안된것
중복된 쓰기나 읽기가 파일이나 통신 디바이스에서 대기하고 있지 않는 경우, 통신 다바이스의 경우에는 SetCommMask 에 의해서 지정된 이벤트중의 하나가 발생할 때까지 파일이 시그널 되지 않은 상태로 남게 된다.
[code]파이프[/code]
시그널
파이프에 읽지 않는 데이터가 있는 경우, 주어진 파이프에 해당되는 쓰기 핸들을 이용해서 WriteFile 함수를 사용하면 파이프에 데이터를 써 넣을 수 있다.
시그널안된것
파이프가 비어있는 경우, 주어진 파이프에 해당되는 읽기 핸들을 이용하여 ReadFile 함수를 사용하면 파이프에 데이터를 읽을 수 있다.
[code]이름을 가진 파이프[/code]
시그널
이름을 가진 파이프에 읽지 않은 데이터가 있거나 클라이언트 애플리케이션은 WaitNamedPipe 함수로 파이프를 사용할 수 있을 때까지 대기할 수 있고 CreateFile 이나 CallnamedPipe 함수를 이용해서 이름을 가진 파이프에 연결할 수 있다.
시그널안된것
이름을 가진 파이프가 비었거나 이름을 가진 파이프에 접속하려는 클라이언트가 없는 경우, 이름을 가진 파이프의 데이터는 ReadFile, TransactNamedPipe 함수를 이용해서 읽을 수 있다. 서버는 서버쪽의 이름을 가진 파이프의 연결을 끊을 수 있고 DisconnectNamedPipe 함수를 호출해서 이 객체를 시그널 되지 않는 상태로 만들 수 있다. 또한 서버는 ConnectNamedPipe 함수를 사용해서 이름을 가진 파이프에 새로운 클라이언트가 접속할 때까지 대기할 수 있다.
[code]메일슬롯[/code]
시그널
메일 슬롯에 읽지 않은 데이터가 있는 경우. 클라이언트 프로세스는 WriteFile 함수를 이용해서 메일 슬롯에 데이터를 써넣을 수 있다.
시그널안된것
메일 슬롯이 빈 경우, 서버 프로세스는 ReadFile 함수를 이용해서 메일 슬롯에서 데이터르 읽을 수 있다.
[code]IO 완료 포트[/code]
시그널
완료 포트에 해당되는 파일에 대한 입력이나 출력 작업이 완료된 경우, 같은 프로세스 안의 스레드는 PostQueuedCompletionStatus 함수를 이용해서 I/O 완료 포트를 시그널된 상태로 만들 수 있다.
시그널안된것
완료 포트에 해당되는 파일에 대한 입력이나 출력 작업이 초기화 되고 종료될 때 까지의 경우 GetQueuedCompletionStatus 함수를 이용해서 주어진 I/O 완료 포트에 완료 공지가 발생할 때까지 대기할 수 있다.
'Windows > MFC' 카테고리의 다른 글
Mutex를 이용한 스레드 동기화 (0) | 2013.10.02 |
---|---|
WaitForSingleObject 함수 와 WaitForMultipleObject 함수 (0) | 2013.10.02 |
[thread] Critical Section 임계영역 (0) | 2013.10.02 |
[thread] Interlocked (0) | 2013.10.02 |
CreatePorcess (0) | 2013.10.02 |