Thread.Suspend는 폐지되었습니다. System.Threading 내에서 Monitor, Mutex, Event, Semaphore 등 다른 클래스를 사용하여 스레드를 동기화하거나 자원을 보호하세요. 하이퍼링크 로그인이 보입니다. Thread.Resume은 폐기되었습니다. System.Threading 내에서 Monitor, Mutex, Event, Semaphore 등 다른 클래스를 사용하여 스레드를 동기화하거나 자원을 보호하세요. 하이퍼링크 로그인이 보입니다. 스레드가 일시정지나 계속을 원하면, 저는 이전에 일시정지와 재개라는 두 가지 방법을 사용해봤고, 이 두 가지 방법으로 스레드를 작동시켰는데, 사실 이게 문제였고 당시에는 신경 쓰지 않았어요. 그래서 오늘은 꺼내서 함께 공부해봅시다!
위 두 가지 방법으로 스레드를 일시 중지하고 계속하는 데 어떤 문제가 있나요?
예를 들어, 스레드를 일그러뜨리기 위해 Suspend 메서드를 호출한 후 즉시 Resume 메서드를 호출해 스레드를 계속 진행한다면 문제가 있을 수 있습니다.
스레드를 일시 중지하기 위해 Suspend 메서드를 호출한 후에도 스레드가 즉시 중단되지 않을 수 있습니다. 여기서는 처리 시간이 걸리기 때문입니다. 이 시점에서 즉시 Resume 메서드를 호출해 스레드를 계속 진행하면 프로그램이 즉시 중단됩니다!
마이크로소프트의 설명은 다음과 같습니다:
스레드 활동을 동기화하기 위해 일시정지(Suspend)와 재개 메서드를 사용하지 마세요. 스레드 실행을 일시정지할 때 코드가 무엇인지 알 수 있는 방법이 있을까요? 보안 권한 평가 중에 잠금을 유지하면, AppDomain 내 일시 중지된 스레드 내 다른 스레드들이 차단될 수 있습니다. 클래스 생성자를 실행할 때 AppDomain 내 다른 스레드를 일시 중지하면, 클래스 사용 시도가 차단됩니다. 교착 상태는 쉽게 발생할 수 있습니다.
// 요약: 중단된 스레드를 계속하세요. // 이상 현상: T:System.Threading.ThreadStateException: 스레드는 시작되지 않았거나, 죽었거나, 대기 상태에 있지 않습니다. // T:시스템.보안.보안 예외: 발신자는 올바른 System.Security.Permissions.SecurityPermissions.SecurityPermission을 가지고 있지 않습니다. [구식("스레드. 이력서는 폐기되었습니다. System.Threading 내에서 Monitor, Mutex, Event, Semaphore 등 다른 클래스를 사용하여 스레드를 동기화하거나 자원을 보호하세요. 하이퍼링크 로그인이 보입니다.", 거짓)] [보안안전위급] 공공 공허 이력서(); 이 문제를 어떻게 해결할 수 있을까요?
ManualResetEvent 클래스
이벤트 발생 여부를 하나 이상의 대기 스레드에 알립니다. 이런 유형은 상속될 수 없습니다.
테스트 코드는 다음과 같습니다:
|