이 코드에서 전역 CEvent 개체는 자동 재설정 유형으로 만들어집니다. 또한 작업을 시작하기 위해 해당 이벤트를 기다리는 두 개의 작업 스레드가 있습니다. 세 번째 스레드가 해당 개체에 대해 SetEvent를 호출하는 즉시 이 두 스레드에서 하나와 하나만 스레드(아무도 정확히 어느 스레드를 수신할지 말할 수 있음)이 알림을 수신하고 이후에 이벤트가 두 번째 를 허용하지 않는 비신호 상태가 됩니다. 스레드를 사용하여 이벤트를 파악할 수 있습니다. 이 코드는 별로 유용하지는 않지만 자동 재설정 이벤트의 작동 방식을 보여 줍니다. 두 번째 예제를 살펴보겠습니다: _beginthreadex 호출을 호출하여 만든 스레드가 종료된 후에도 리소스를 계속 보유합니다. 이러한 리소스는 핸들의 CloseHandle() 함수를 스레드에 호출하여 해제해야 합니다. 다음 예제에서는 스레드를 만들고 완료되기를 기다린 다음 리소스를 확보하는 전체 순서를 보여 줍니다. 그리고 내가 본 온라인 자원. 그리고 많은 사용 사례에서 근본적으로 불가능한 일입니다. 이것은 실제로 그 파손의 한 예일 뿐입니다.

각 스레드에는 고유한 스택이 있습니다(스레드 대 프로세스 참조). 아래 예제에서 CreateThread() 함수의 2번째 인수인 stackSize 매개 변수를 사용하여 새 스레드 스택의 크기를 바이트로 지정할 수 있습니다. 이 정수 값이 0이면 스레드에는 만드는 스레드와 크기가 같은 스택이 제공됩니다. 공유 리소스를 사용하는 스레드 수를 제한하려면 세마포를 사용해야 합니다. 세마포는 커널 오브젝트입니다. 공유 리소스를 사용하는 스레드 수를 추적하기 위해 카운터 변수를 저장합니다. 예를 들어, 다음 코드는 MFC Csemaphore 클래스에 의해 세마포를 생성하며, 최대 5개의 스레드만 지정된 기간 동안 공유 리소스를 사용할 수 있도록 보장할 수 있습니다(이 사실은 constructo의 첫 번째 매개 변수로 표시됩니다. r). 처음에 리소스를 캡처한 스레드가 없는 것으로 간주됩니다(두 번째 매개 변수): 동기화를 위해 프로세스 및 스레드 개체를 사용하려면 wait-functions를 사용해야 합니다. 이러한 함수를 배우기 전에 핵심 개념, 즉 동기화 개체로 사용할 수 있는 모든 커널 개체가 두 상태 중 하나에 있을 수 있다는 것을 배워야 합니다. 신호 상태 및 비신호 상태. 중요한 섹션을 제외하고 모든 동기화 개체는 이러한 두 상태 중 하나에 있을 수 있습니다.

예를 들어 프로세스 및 스레드 개체의 경우 실행을 시작할 때 신호되지 않은 상태가 발생하고 실행을 완료할 때 신호상태가 발생합니다. 지정된 프로세스 또는 스레드가 완료되었는지 여부를 결정하려면 해당 대표 개체가 신호 상태에 있는지 확인해야 합니다. 이를 위해 대기 함수로 전환해야 합니다. 다중 스레드 환경에서 각 스레드에는 고유한 로컬 스레드 스택 및 레지스터가 있습니다. 여러 스레드가 읽기 및 쓰기를 위해 동일한 리소스에 액세스하는 경우 값이 올바른 값이 아닐 수 있습니다. 예를 들어 응용 프로그램에 파일에서 콘텐츠를 읽기 위한 스레드와 파일을 작성하는 스레드가 두 개의 스레드가 있다고 가정해 보겠습니다. 쓰기 스레드가 쓰기를 시도하고 읽기 스레드가 동일한 데이터를 읽으려고 하면 데이터가 손상될 수 있습니다. 이 경우 파일 액세스를 잠급하려고 합니다. 스레드 동기화에는 두 단계가 있습니다. 신호 및 비 신호.

Read all articles in Uncategorized