우선 순위 큐를 사용할 수 있다면 각 제작자는 메시지를 보낸 카운터를 가질 수 있다고 생각합니다. 그리고 큐는 messageSent 번호와 날짜에 따라 순서가 정해 지므로 전송 된 번호가 다른 메시지보다 작 으면 다른 메시지보다 먼저 메시지를 보내야합니다. 프로듀서 1 (첫번째) 큐에 5 개 요소를 추가하고 프로듀서 2 일 추가하는 경우 자바에서
class Message { //or you can implement Comparable<Message>
final Date created = new Date();
final int messageNumber;
public Message(int m){this.messageNumber = m;}
}
BlockingQueue<Message> queue = new PriorityBlockingQueue<Message>(new Comparator(){
public int compare(Message m1, Message m2){
if(m1.messageNumber < m2.messageNumber) return 1;
if(m2.messageNumber < m1.messageNumber) return -1;
if(m1.messageNumber == m2.messageNumber) return m1.created.compareTo(m2.created);
}
});
class Provider{
int currentMessage = 0;
void send(){
queue.offer(new Message(currentMessage++));
}
}
그래서, 큐는 뮤텍스 구현을 상상하기
P1: 5
P1: 4
P1: 3
P1: 2
P2: 1
P1: 1
하드해야합니다 그것은 또한 최소한의 공정성 보장을 제공하지 않습니다. 그게 당신이 사용하는 하나의 문제가 있다면 그냥 버려. –