는 thusly 히 코드의 특정 블록을 입력 한 번에 1 실을 수 있도록 :2 스레드 내가 시도하고
는private static object lockObject = new object();
protected override void WndProc(ref Message message) {
if (id != null) {
id.ProcessMessage(message);
lock(lockObject) {
if (id.ScanCode.Length > 4) {
...
}
}
}
base.WndProc(ref message);
}
때때로 2 개 스레드가 들어가 모두 코드를 실행하십시오. 나는 이것을 VS 디버거에서 확인했다. 때로는 단 하나의 스레드가 들어간다. 좋지만 적어도 시간의 절반은 2 개의 스레드가 들어간다. 그 내부
나는이 일을하고있어 경우 블록 : 나에게id.ScanCode = string.Empty;
return;
가이 그것을 차단됩니다 한 경우, 입력에서 2 스레드를 방지한다 보인다. 하지만 어쩌면 내가 잘못하고있는 것 같아. 두 번째 스레드가 거기에 들어가는 것을 막는 가장 간단한 방법은 무엇입니까? 동시에 입장 할 수 있었습니까?
나는 어떻게 이런 일이 일어날 지 의심 스럽습니다. 이미 lock()을 사용하여 두 개의 스레드가 lock 문 –
의 코드를 입력 할 수 없었습니다. VS 디버거에서 확인되었습니다. – HerrimanCoder
*'id! = null' 체크를 통과하는 모든 * 쓰레드는 어떤 시점에서 잠긴 코드 블록을 입력 할 것입니다. 그들은 동시에 * 입력하지 않습니다. 일부 스레드 만 입력하려는 경우 일종의 조건부 검사가 필요합니다. –