Trong quá trình chuẩn bị cho kỳ thi sắp tới của Hệ thống đồng thời, tôi đang cố gắng hoàn thành một số câu hỏi từ cuốn sách "Nghệ thuật lập trình đa xử lý". Một câu hỏi được bugging tôi:Lập trình đa xử lý: ngăn xếp không khóa
tập 129: Liệu nó có ý nghĩa để sử dụng cùng chia sẻ đối tượng backoff cho cả push và pop trong đối tượng LockFreeStack của chúng tôi? Làm thế nào chúng ta có thể cấu trúc backoff trong không gian và thời gian trong EliminationBackOffStack ?.
Câu hỏi này làm tôi nhớ vì điều đầu tiên đến với tâm trí của tôi là nó không có ý nghĩa bởi vì tất cả đối tượng ngược lại là thực hiện một quá trình chờ đợi, vậy tại sao không chia sẻ nó? Phần thứ hai của câu hỏi hoàn toàn eludes tôi và giúp đỡ bất kỳ được chào đón nhất.
Mã cho LockFreeStack:
public class LockFreeStack<T> {
AtomicReference<Node> top = new AtomicReference<Node>(null);
static final int MIN_DELAY = ...;
static final int MAX_DELAY = ...;
Backoff backoff = new Backoff(MIN_DELAY, MAX_DELAY);
protected boolean tryPush(Node node) {
Node oldTop = top.get();
node.next = oldTop;
return(top.compareAndSet(oldTop, node));
}
public void push(T value) {
Node node = new Node(value);
while (true) {
if (tryPush(node)) {
return;
} else {
backoff.backoff();
}
}
}
gì phương pháp Backoff.backoff() thực sự làm gì? "EliminationBackOffStack" được đề cập là gì?Vui lòng cung cấp thêm thông tin về các khu vực đó. –
Bạn có thể cung cấp một số thông tin - hoặc thậm chí mã - cho lớp {{Backoff}} không? Nó đang làm một số loại backoff theo hàm mũ? –
http://books.google.com.vn/books?id=pFSwuqtJgxYC&lpg=PA253&ots=10QEvrNBh1&dq=eliminationbackoffstack&pg=PA253#v=onepage&q=eliminationbackoffstack&f=false –