2017-12-15 3 views
2

Ada 프로그래밍 언어에서 랑데부는 프로세스 간 동기화/메시지 전달 방법입니다. Java에서이 메커니즘을 구현하려면 어떻게해야합니까 (태스크 일시 중단 및 선택 대기와 함께)? java의 원격 메서드 호출과 Exchanger 클래스를 살펴 보았지만 적절한 솔루션을 아직 찾지 못했습니다. ADA하지만은 당신이 가능 SynchronousQueueBlockingQueue 구현 중 하나를 찾고 될 수 있습니다 제안 ADA의 만남에 빠른 구글에 익숙하지자바의 Ada 랑데뷰 대응 자

+1

Java의 동시성 기능이 낮은 수준 (오류 발생 가능성이 높음)이기 때문에이를 사용하여 Ada의 높은 수준의 동시성 기능을 구현할 수 있어야합니다. 문제는 프로젝트가 얼마나 많은 노력을 기울여 그것을 소비 할 수 있는지입니다. 랑데뷰 의미론이 정말로 필요하다면 아마 Ada와 Java에서 원하는 동작을 구현하는 데 걸리는 시간을 예측하여 예산을 관리하는 사람들에게 제시해야합니다. –

답변

2

.

아마도 메시지가 전달되었을 때 어떤 일이 일어나고 싶은지 설명하면 더 많은 도움이 될 것입니다.

+0

나는 SynchronousQueue와 함께 가기로 결정했다. 기본적으로 저는 자동차가 산란되고 실행될 수있는 8 자 트랙을 구현할 과제를 가지고있었습니다. 나는 그들이 교차로에서 충돌하지 않도록해야했다. 자동차 쓰레드는 트랙 진행 프로세스를 호출하여 앞으로 나아갈 수 있는지 물어보고 2 대가 교차로에 도착하면 교차가 비어 있으면 무작위로 통과 할 수 있습니다. – kbijoch

+0

@kbijoch - 기꺼이 도와 드리 겠지만 설명은 [Semaphore] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)에 대한 자세한 정보를 찾는 것처럼 들립니다.) 또는 [CountDownLatch] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)를 참조하십시오. 그러나 'SynchronousQueue'가 작동하는 경우에는이를 수행하십시오. – OldCurmudgeon

+0

그래, 알아,하지만 교수님이 Ada의 랑데뷰를 구체적으로 시행하라고 말씀하셨습니다. 나는 동기 부여가 이것을 behid 모르지만 그는 내 솔루션은 괜찮습니다 뭐든간에. – kbijoch

4

Java에서 구현하기 가장 어려운 부분은 선택적 대기 및 항목 대기열입니다. 블로킹 큐는 선택 대기없이 Ada에서 보호 된 항목의 대략적인 시뮬레이션입니다.

Java에서 Ada select 문과 동일한 항목이 있다고 생각하지 않습니다. 프로그래머가 선택 가능한 큐 정책을 사용하여 항목 대기열에 해당하는 기능을 제공 할 수있는 방법도 없습니다. Java 대기/알림 조합은 대기중인 스레드를 활성화하지만 어느 스레드인지는 알 수 없습니다. 알림 명령에 의해 실제로 활성화되는 스레드는 경쟁 조건을 기반으로하며 임의로 나타나는 효과가 있습니다. 분석 결과 모든 대기중인 스레드는 일 수 있으며 프로그램 실행 중 일부 시점에서 알림을 통해 활성화 될 것으로 예상되지만 스레드 활성화 순서에 대해 Java에서 보장 할 수는 없으며 주어진 스레드가 대기 모드에서 활성화 될 수도 있습니다 상태.