비슷한 언어가 여기에 적용되지만 C#으로 작성한 응용 프로그램이 있습니다.멀티 스레딩 모범 사례
응용 프로그램은 다양한 UDP 및 TCP 소켓을 통해 수신되는 데이터를 기반으로 실시간으로 양식의 창에 그래픽 장면을 그리는 작업을 수행합니다. 각 UDP 및 TCP 연결은 자체 스레드를 사용합니다. 이러한 스레드는 메모리의 다양한 객체를 수정하여 그래픽 디스플레이를 수정합니다. 또한 사용자 이벤트 (버튼 클릭 등)를 수신 할 수있는 사용자 인터페이스 스레드가 있는데,이 객체 스레드는 동일한 객체 및 디스플레이를 수정합니다. 마지막으로, 나는 또한 같은 개체와 디스플레이를 수정하는 자신의 스레드를 실행하는 많은 타이머를 가지고 있습니다.
수정되는 메모리의 개체는 약 15 개의 서로 다른 클래스로 구성됩니다.
모든 것이 꽤 안정적으로 작동하지만, 다른 클래스로 수정되는 모든 클래스가 서로 다른 스레드로 수정되면 동기화 잠금이 많이 추가되었습니다. 각 클래스를 개별적으로 살펴보고 둘 이상의 스레드가 어떤 메모리를 변경할 수 있는지 확인해야했습니다.
이 상황에서 아주 쉽게 보이는 부분이 있습니다. 어딘가에 동기화를 추가하는 것을 잊어 버리는 것입니다.
다른 사람들이 내가 한 것처럼 구현할지, 아니면 좀 더 우아한 방법이 있는지 궁금합니다. 아마도 클래스 A의 수정을 모두 자체 스레드 또는 다른 것에 넣는 것이 어쩌면 궁금합니다.
(추신 : 처음에는 일이 잘 풀리지 않으면 여기에서 질문하는 것이 두려워요.하지만 내 질문이 너무 분명해서 생각하지 않습니다. 어느 쪽이든.; o)
감사 :
난, 난 그냥 (P 일) 내 이전의 경험의 일부를 공유하고 비슷한 상황에 대처하기 위해 다른 방법을 많이가있다 생각합니다. 이것은 주제에 대한 정말 좋은 토론입니다. – vmayer