1

如果我们假设我们有一个典型的队列实现(带有代表节点的链表、一个计数器、一个推送方法和一个弹出方法),那么测量到达率和离开率的最佳方法是什么?列表中的新项目?我需要两个单独的线程,一个两个测量每个速率吗?

任何伪代码/想法都将受到欢迎!

(我只是很快写了这个来帮助任何答案。为简单起见省略了模板)

class my_queue{
public:
    struct Node{
        Node* next;
        Node* previous;
        int data;
    }

    Node* head;
    Node* tail;
    int queue_size;

    my_queue(){}

    int pop(){
        Node* old_head = head;
        Node* new_head = old_head->previous;
        new_head->next = null;
        head = new_head;
        int data = old_head->data
        delete old_head;
        queue_size--;
        return data;
    }

    void push(int data){
        Node* new_tail = new Node();
        new_node->data = data;
        Node* old_tail = tail;
        old_tail->previous = new_tail;
        new_node->next = old_tail;
        tail = new_tail;
        queue_size++;
    }

    int getSize(){
        return queue_size;
    }
};
4

1 回答 1

0

看起来很简单:您只需使用两个原子的 push/pop 计数器,每次操作都会递增。然后,您使用一个每秒运行的线程,记录当前状态(或随心所欲地使用它)并将计数器重置回 0。

您唯一需要注意的是使用一个计时器来计算您的功能所花费的时间,以确保您不会偏离 1 秒间隔太远(您还应该复制两个计数器并重置它们如果您花费大量时间进行处理,则在开始时)。

于 2014-01-13T01:01:50.710 回答