2011-08-05 83 views
1

试图执行一个ConcurrentQueue防止一个项目被使用次数超出特定#更多。例如,我想要一个可以出队10次的用户对象,之后,用户将被注销并处理。如何防止物品被使用超过特定数量?

显然,通过使用Dictionary并跟踪每个对象的使用次数,以及ConcurrentQueue,很容易实现。然而,只是想知道是否有人有任何管理这个巧妙的想法?

+0

最简单的将是创建你的对象是去是某种类型的(可数的实例),包含使用次数的队列中的基础类,并创建为10,一旦降低了计数出列的包装降为零做你的逻辑,有可能是更好的方法来做到这一点,我认为 –

+0

不幸的是,我使用的ConcurrentQueue目前被别人定义的,并且是一个接口类型,所以我不认为我可以走这条路。 – esac

+0

字典是在这种情况下你最好的选择,在一些检查字典的使用计数,并相应做逻辑的其余部分包裹出列。与你的对象相比,词典将会非常小(明智的记忆)(除非你有很多对象)。 –

回答

2

像这样的东西在Java中:

interface Dequeable 
{ 
    public int dequed(); 
} 

class ConcurrentQueueImpl extends ConcurrentQueue 
{ 
    .................. 
    ................. 

    @override 
    public Dequeable deque() 
    { 
     Dequeable obj=.................; 

     **if(obj.dequed()>=10)** 
     { 
      // dispose off obj 
      return null; 
     } 
     return obj; 
    } 

} 

class SampleDequeableClass implements Dequeable 
{ 
    private int dequedCounter=0; 
    public int dequed() 
    { 
     dequedCounter++; 
     if(dequedCounter>=10) 
     { 
      // log off this object... 
     } 
    } 
} 
+0

如果你会阅读评论,你会看到他已经表示他不能这样做,因为我提出了这个确切的建议。 –

0

创建您自己的线程安全Queue<T>,就像天没有C#4.0。并在其Dequeue方法中记录使用次数。您无需修改​​该项目的原始类别/界面。您可以将另一个Dictionary<IFoo, int>作为使用计数器。

相关问题