질문에 상태에 따라 개체의 공유 메서드를 다중 스레드 할 수 있습니까? 나는 스킬 셋에 실을 꿰매고 있지 않다. 그렇지 않으면 나 자신을 테스트 할 것이다. 다른 한편으로, 나는 VB.Net에서 멀티 스레드 응용 프로그램의 일부가 될 수있는 클래스를 디자인하는 데 관여하고 있습니다.공유 메서드를 다중 스레드 할 수 있습니까?
답변
"한 번에 여러 스레드에서 공유 메서드를 호출하는 것이 안전합니까?"라는 대답은 "의존적"입니다. 메서드 자체는 다중 스레드 또는 단일 스레드가 아닙니다. 스레드와 메소드는 매우 별개의 것입니다.
공유 메서드가 여러 스레드에서 호출 된 경우 다른 말로는 동기화가 없으면 해당 스레드에서 동시에 실행됩니다. 메서드가 적절한 보호 장치없이 공유 상태를 사용하는 경우 문제가 발생할 수 있습니다. 그러나 공유 리소스에 액세스 할 때 (예 : 잠금 사용) 또는이 스레드간에 공유되는 상태에 액세스하지 않는 경우에는 문제가되지 않습니다.
공유 상태를 알아두면 좋습니다. Jon Skeet에서 우리는 신뢰합니다. ;) –
예, 가능합니다. 모든 메소드는 스레드가 될 수 있습니다.
같은 방법이 여러 스레드 경로에 있더라도? –
@hydroparadise : 예. 그들은 별도로 처형 될 것입니다. – Ryan
예, 공유 메서드는 여러 스레드에서 동시에 실행할 수 있습니다. 실제로, 그들은 종종 있습니다. 인스턴스 메서드와 비교하여 공유 메서드를 실행하는 스레드를 많이 제어 할 수 없습니다. 예를 들어 ASP.NET 응용 프로그램을 생각해보십시오. 다른 페이지 요청이 다른 스레드에서 올 수 있습니다. 웹 애플리케이션에서 공유 메소드를 호출하면 다중 스레드에 의해 실행될 확률이 높습니다.
이것은 API를 설계 할 때 매우 중요합니다. 모든 자존심을 가진 API 작성자는 모든 공유/정적 메소드가 스레드로부터 안전한지 확인하기 위해 극단적 인 방법을 사용합니다. 어쨌든, API를 호출 한 사람이 제공하는 모든 공유/정적 메소드에 대한 액세스를 동기화하도록 만드는 것은 엄청나게 부담 스러울 것입니다. Microsoft가 BCL의 거의 모든 클래스에 제공하는 설명서를 살펴보십시오.
이 형식의 모든 공용 static (Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 구성원은 스레드 안전성을 보장하지 않습니다.
스레드로부터 안전하지 않은 Microsoft에서 제공하는 정적 메서드를 아직 실행하지 않았습니다. 1 그리고 당신은 알려 주시기 하나 알고 있다면 그것은 I.
1을 당신을 위해 쉽게 생활을하고 있기 때문 좋다.
- 1. 다중 스레드 환경에서 공유 메모리 동기화
- 2. "공유"목록 상자에 액세스 할 수있는 다중 스레드
- 3. 동일한 데이터를 공유/액세스하는 다중 스레드 문제
- 4. 다중 스레드, DataReaders 및 대량 삽입 ...이 응용 프로그램을 다중 스레드 할 수 있습니까?
- 5. 다중 스레드 함수는 정적 배열을 사용하여 스레드간에 데이터를 공유 할 수 있습니까?
- 6. 어떻게 다중 스레드 응용 프로그램을 Java로 배포 할 수 있습니까?
- 7. 컨트롤러에서 Daemon 메서드를 호출 할 수 있습니까?
- 8. 공유 라이브러리에 공유 라이브러리를로드 할 수 있습니까?
- 9. 다중 스레드 웹 프로그래밍이 있습니까?
- 10. 스레드 간 공유 메모리
- 11. 여러 프로젝트에서 ApplicationSettings를 공유 할 수 있습니까?
- 12. 어떻게 커널 스레드 통신을 할 수 있습니까?
- 13. Windows 서비스의 다중 스레드
- 14. 다중 프로세스 및 다중 스레드 디자인
- 15. 다중 포트를위한 다중 스레드?
- 16. 다중 스레드 프로그램에서 분기
- 17. 다중 스레드 #
- 18. 프로세스 VS 스레드 : 두 프로세스가 동일한 공유 메모리를 공유 할 수 있습니까? 두 개의 스레드가있을 수 있습니까?
- 19. 제한된 다중 스레드 작업
- 20. 한 번에 메서드를 실행하는 스레드 수 제한
- 21. 스레드 - 변수 공유
- 22. 는 멀티 스레드 펄에서 해시의 해시를 공유 할 수
- 23. 다른 활동간에 스레드 공유
- 24. Entity Framework + 다중 스레드 + 지연로드
- 25. NLog 로그 메서드를 모의 할 수 있습니까?
- 26. Model.objects.all() 메서드를 재정의 할 수 있습니까?
- 27. android CalendarView 메서드를 재정의 할 수 있습니까?
- 28. 이런 식으로 메서드를 오버로드 할 수 있습니까?
- 29. 변수를 사용하여 메서드를 호출 할 수 있습니까?
- 30. C# 메서드가 메서드를 반환 할 수 있습니까?
멀티 스레드 응용 프로그램의 일부가 될 수있는 클래스를 디자인하는 경우 스킬 셋에 스레딩을해야 할 때가 있습니까? – MarkJ
예, 동의합니다. 당신이 관심있는 것을 배울 필요가있는 기회를 좋아합니다. 이런 기회가 있습니다 : –