사용하기에 앞서 뮤텍스와 쓰레드의 개념을 잡고 들어가보자.
프로세스(Process)는 말 그대로, 독립적인 실행의 단위이다.
쓰레드(Thread)는 멀티프로세스가 지원되는 OS에서 실행의 최소 단위이다.
쓰레드가 모여서 하나의 프로세스를 구성하게 된다. 즉 프로세스를 실행하면
한개 이상의 쓰레드가 기동되는것을 의미하는 것이다.
하나의 프로세스에 여러개의 쓰레드를 기동시키기도 한다.
Mutex란 Mutual Exclusion의 약자로써, Thread가 여러개 존재 할 때 동시간에 접근을 허용하지 않는다는 의미를 가지고 있다.
(만약 Mutex에 대해 더욱 깊게 들어가고 싶으시다면,
http://blog.naver.com/ckpj1?Redirect=Log&logNo=100015002737
블로그를 참조해주시길 바랍니다.)
Using System.Threading;
Mutex 클래스는 System.Threading 네임스페이스에 존재하며 이것을 Using을 통해 사용해주자.
Mutex의 생성자이다.
생성자
설명
public Mutex(); 기본값으로 뮤텍스를 초기화한다.
public Mutex(bool); 호줄하는 쓰레드가 뮤텍스의 초기 소유권을 갖는지를 정한다.
public Mutex(bool, string); 뮤텍스의 이름을 정한다.
public Mutex(bool, string, bool); 뮤텍스의 초기 소유권, 뮤텍스 이름, 메소드가 뮤텍스의 초기 소유권 반환 여부
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //해당 함수와 같이 뮤텍스를 사용하는 함수를 만들어주자. private void prevInstance() { bool createdNew; Mutex duplicate = new Mutex(true, "MyMutex", out createdNew); try { if (createdNew) { duplicate.ReleaseMutex(); } else { MessageBox.Show("이미 실행중입니다!", "실행 오류!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); } } catch (Exception ex) {} } Mutex duplicate = new Mutex(true, "MyMutex", out createdNew); //생성자를 통해 duplicate 인스턴스를 생성하면서 볼 수 있듯이, 초기 소유권을 duplicate에게 주고 이름을 MyMutex로 지정해주었다. 뮤텍스의 초기 소유권 반환 여부라는 것은, 만약 자신에게 초기 소유권이 없으면 이것을 반환해야 한다. 다시 말해, 나중에 켜진 프로세스라면 이 프로세스는 createdNew에 true가 반환될것이다. duplicate.ReleaseMutex(); // if에서 createdNew가 true가 반환된다면 Mutex를 끄고 프로세스 자원을 독점한다. else { MessageBox.Show("이미 실행중입니다!", "실행 오류!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); } 해당 소스는 createdNew가 false라면 이미 실행중이라는 경고와 함께 프로세스를 종료한다. | cs |
'개발' 카테고리의 다른 글
[javascript] 중복 실행 방지 (0) | 2013.12.23 |
---|---|
[.net] 문자열의 내용을 검색하거나 조작하는 방법 (0) | 2013.12.20 |
[javascript] 한글자씩 입력 (0) | 2013.12.18 |
[javascript] 이미지맵 (0) | 2013.12.13 |
[jquery] MsgBox 그리드 (0) | 2013.12.13 |