어쩌면 너무 늦었지만 winforms 응용 프로그램의 전역 변수를위한 정적 클래스가 있습니다. 지금, 나는 이것이 문제를 일으킬지도 모른다는 것을 깨닫고있다. 질문 : "내 응용 프로그램에서 정적 클래스 변수를 사용하면 다중 사용자 환경에서 실행되는 동안 동시성 문제가 발생합니까?"정적 변수와의 동시성
이것이 사실이라면 누구든지이를 극복 할 수있는 방법을 제안 할 수 있습니까? 사전에
감사
어쩌면 너무 늦었지만 winforms 응용 프로그램의 전역 변수를위한 정적 클래스가 있습니다. 지금, 나는 이것이 문제를 일으킬지도 모른다는 것을 깨닫고있다. 질문 : "내 응용 프로그램에서 정적 클래스 변수를 사용하면 다중 사용자 환경에서 실행되는 동안 동시성 문제가 발생합니까?"정적 변수와의 동시성
이것이 사실이라면 누구든지이를 극복 할 수있는 방법을 제안 할 수 있습니까? 사전에
감사
짧은 대답 : 아니요. 다중 사용자 환경이란 여러 사용자가 프로그램을 사용하고 있지만 모든 사용자가 새 인스턴스을 시작한다는 것을 의미합니다. 정적 변수는 여러 프로세스에서 공유되지 않으므로 프로그램이 여러 스레드로 구성되면 문제가됩니다.
그러나 정적 전역 변수는 "좋은 점"(tm)이 아닙니다. 프로세스가 진행되는 동안 을 실행하면에 여러 스레드가 실행될 수 있으므로 문제가 발생할 수 있으므로이를 피하십시오.
짧은 답변 : 당신이 변수를 수정하려고 할 때 예, 단순히 동시성 문제를 방지하기 위해 잠금을 사용합니다.
죄송합니다, 저는 C#의 초심자 코더입니다. 내 질문이 어리석은 것을 발견하지 마십시오. 여기에 무엇을 의미하는지 잠그면 정적 변수와 작업을 동기화합니까? – qbaloch
먼저 글로벌 변수는 좋지 않으므로 가능하면 전역 변수를 사용하지 않는 것이 좋습니다.
여러 스레드가 동일한 변수를 읽고 쓰는 경우 병행성에 문제가 있습니다. 예. 이것을 피하려면 단일 스레드에서 전역 변수를 읽거나 쓰십시오.
그렇게 할 수 없다면 lock access to the variables 수 있습니다.
응용 프로그램이 여러 사용자에게 동일한 인스턴스를 사용합니까? –
더 많은 문제 정의가 필요합니다 (예 : "다중 사용자 환경", 동시성 문제). – edtheprogrammerguy
UI 스레드에서 모든 작업을 수행하면 문제가되지 않을 것입니다. – spender