下面列出了java.util.concurrent.ConcurrentLinkedDeque#pollFirst ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
Borrower<POOLABLE> pendingPoll() {
ConcurrentLinkedDeque<Borrower<POOLABLE>> q = this.pending;
Borrower<POOLABLE> b = q.pollFirst();
if (b != null) PENDING_COUNT.decrementAndGet(this);
return b;
}
private static List<MessagePromise<?>> removeAll(ConcurrentLinkedDeque<MessagePromise<?>> deque) {
final List<MessagePromise<?>> result = new LinkedList<>();
MessagePromise<?> promise;
while ((promise = deque.pollFirst()) != null) {
result.add(promise);
}
return result;
}
private void rdmaPostWRList(LinkedList<IbvSendWR> sendWRList) throws IOException {
if (isError() || isStopped.get()) {
throw new IOException("QP is in error state, can't post new requests");
}
ConcurrentLinkedDeque<SVCPostSend> stack;
SVCPostSend svcPostSendObject;
int numWrElements = sendWRList.size();
// Special case for 0 sgeElements when rdmaSendWithImm
if (sendWRList.size() == 1 && sendWRList.getFirst().getNum_sge() == 0) {
numWrElements = NOOP_RESERVED_INDEX;
}
stack = svcPostSendCache.computeIfAbsent(numWrElements,
numElements -> new ConcurrentLinkedDeque<>());
// To avoid buffer allocations in disni update cached SVCPostSendObject
if (sendWRList.getFirst().getOpcode() == IbvSendWR.IbvWrOcode.IBV_WR_RDMA_READ.ordinal()
&& (svcPostSendObject = stack.pollFirst()) != null) {
int i = 0;
for (IbvSendWR sendWr: sendWRList) {
SVCPostSend.SendWRMod sendWrMod = svcPostSendObject.getWrMod(i);
sendWrMod.setWr_id(sendWr.getWr_id());
sendWrMod.setSend_flags(sendWr.getSend_flags());
// Setting up RDMA attributes
sendWrMod.getRdmaMod().setRemote_addr(sendWr.getRdma().getRemote_addr());
sendWrMod.getRdmaMod().setRkey(sendWr.getRdma().getRkey());
sendWrMod.getRdmaMod().setReserved(sendWr.getRdma().getReserved());
if (sendWr.getNum_sge() == 1) {
IbvSge sge = sendWr.getSge(0);
sendWrMod.getSgeMod(0).setLkey(sge.getLkey());
sendWrMod.getSgeMod(0).setAddr(sge.getAddr());
sendWrMod.getSgeMod(0).setLength(sge.getLength());
}
i++;
}
} else {
svcPostSendObject = qp.postSend(sendWRList, null);
}
svcPostSendObject.execute();
// Cache SVCPostSend objects only for RDMA Read requests
if (sendWRList.getFirst().getOpcode() == IbvSendWR.IbvWrOcode.IBV_WR_RDMA_READ.ordinal()) {
stack.add(svcPostSendObject);
} else {
svcPostSendObject.free();
}
}