여러 스레드에서 전역 객체 사용
글쓴이: Lightstar / 작성시간: 수, 2014/05/14 - 11:03오후
어떤 처리 함수를 가진 클래스를 전역 변수(객체)로 만들고 여러 스레드에서 그 객체의 함수들을 사용하는건 잘못된건가요?
전역 객체 A에 함수 a랑 b가 있습니다.
스레드1에서 A.a()를 불렀는데 이건 30초가 걸립니다.
10초쯤 지났을 때 스레드2에서 A.a()를 부르면 스레드1이 끝나야 작업을 처리하게되나요? 아니면 스레드1 관계없이 바로 처리시작할 수 있나요?
전역 객체 내부에 전역변수가 선언되어 있으면 물론 여러 스레드에서 전역객체의 그 전역변수의 값을 이용하려고 할 때 문제가 되겠지만 함수도 같은지 궁금합니다.
함수내부에서 변수들을 선언해준건 함수가 실행될 때 만들어져서 사용되는거니 위에서 문제가 없다면 함수내부 변수는 문제가 없을것같습니다 맞나요?
좀 더 나아가면 전역 객체가 아니더라도 어느 클래스의 함수를 같은 객체(인스턴스)를 이용해서 호출할 때 동시에 처리가 안되고 하나가 끝나야 다음 작업을 할 수 있나요?
Forums:
재진입 함수를 찾아보세요.
재진입 함수를 찾아보세요.
실행 자체는 당연히 할 수 있습니다.
함수 내부의 변수들은 말씀하신대로 따로 만들어지므로 보통 상관이 없습니다만, 그 안에서 공유 포인터나 핸들 등으로 서로 다른 스레드가 동일한 자원을 사용할 경우 문제의 소지가 생기는 거죠. 이 부분은 여러가지 동기화 기법으로 적절히 처리하시면 됩니다.
--
댓글 달기