간단한 작업 대기열을 구현하는 데 문제가 있습니다. 몇 가지 분석을하는 중, 나는 미묘한 문제에 직면 해있다. 작업 대기열은 일반 연결 목록에 의해 지원됩니다. 코드는 본 간체 같다 : 이것은 간체 같은간단한 작업 대기열 구현시 문제가 발생했습니다.
0. while (true)
1. while (enabled == true)
2. acquire lock on the list and get the next action to be executed (blocking operation) (store it in a local variable)
3. execute the action (outside the lock on the list on previous line)
4. get lock on this work queue
5. wait until this work queue has been notified (triggered when setEnabled(true) has been callled)
는 setEnabled (E) 동작을 보이는이 작동하더라도
enabled = e
if (enabled == true)
acquire lock on this work queue and do notify()
은 교착 상태가 발생되는 조건이있다. 그것은 다음과 같은 드문 상황에서 발생합니다 작업이는, setEnabled, 단계 (3) 동안 실행되는 동안
- (false)를 단계는 (4), 입력 (참)는, setEnabled되기 직전
- 가 호출이라고합니다
- 지금 단계 (5) 계속이 작업 큐가 이미 통지하지만 우리는 그것을 나는이 문제를 해결하려면 어떻게
를 놓친되어 있기 때문에, 영원히 기다리고? 나는 이것을 한동안보고 있었지만 해결책을 찾지 못했습니다.
스레드 동기화에 상당히 익숙합니다.
고마워요.
특정 언어로 작업하고 있습니까? 예를 들어 .NET 언어는 대부분의 작업을 완료합니다. – ChaosPandion
Java 1.1 만 지원하는 모바일 장치에서 Java로이 작업을 수행하고 있습니다. 나는 솔루션에 관심이있을뿐 아니라 (내가 쉽게 구글과 라이브러리를 다운로드 할 수 있기 때문에),하지만 내가 뭘 잘못하고 있는지 알고 싶다. 나는 실을 결코 파고 들지 못했고, 이것이 자신을 향상시킬 수있는 좋은 기회라고 생각했습니다. –