c********r 发帖数: 286 | 1 Pthread 没有,有一个thread的
public class BlockingQueue {
private List queue = new LinkedList();
private int limit = 10;
public BlockingQueue(int limit){
this.limit = limit;
}
public synchronized void enqueue(Object item) throws InterruptedException{
while(this.queue.size() == this.limit){
wait();
}
if(this.queue.isEmpty()){
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue() throws InterruptedException {
while(this.queue.isEmpty... 阅读全帖 |
|
A*******e 发帖数: 2419 | 2 假设空队列时,先有dequeue执行,发现队列为空,等待。
这时来一个enqueue,调用notifyAll()之后,插入新对象之前,dequeue已经唤醒,试
图去删除,这时队列仍然可能是空啊。
public class BlockingQueue {
private List queue = new LinkedList();
private int limit = 10;
public BlockingQueue(int limit){
this.limit = limit;
}
public synchronized void enqueue(Object item)
throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
publi... 阅读全帖 |
|
g****v 发帖数: 971 | 3 发现这个还是挺常见的,这是网上的标准解法,希望可以对大家有帮助。
唯一的问题是为什么2个方法里面都用while来判断, 而不是用if?
---------------------------------------------
public synchronized void enqueue(Object item)
throws InterruptedException {
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
this.queue.add(item);
}
public synchronized Object dequeue()
throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == t... 阅读全帖 |
|
w****o 发帖数: 2260 | 4 【 以下文字转载自 JobHunting 讨论区 】
发信人: winhao (勇敢的人), 信区: JobHunting
标 题: 问一下STL里的queue, and stack 遍历的问题
发信站: BBS 未名空间站 (Sun Mar 4 02:36:31 2012, 美东)
好像std里queue 和stack的实现没有提供iterator,怎么遍历呢?就是说怎么查看queue
,stack里的elements?
感觉没法弄。比如queue,除非把queue给弄散了,一个一个的 front(), pop(),来查看
里面的东西,可是这样的话,queue就给破坏了。
stack也有同样的问题。
谁给说说有什么好的方法?难道要自己新创造一个实现?
谢谢! |
|
t**********1 发帖数: 550 | 5 其实严肃讨论的,我的12306架构又转移到出票机(支付系统)上面来了。
如果要达到我说的性能,其实支付端要实现一个ACID的系统。幸好我们的应用简单,不
需要通用ACID数据库,只需要简化成一个ACID message queue就好了。
ACID message queue,输入是有序的message。每个message带一个单调递增的message
ID。甚至增量严格定义为1没有问题。
如果抢票机死掉,这个message queue负责回放某个message ID开始的所有交易。恢复
现场。
其实这个message queue关键技术在于存储。存储设备的IOPS要达到至少1M IOPS。
网上搜搜,就可以看到多少battery backed RAMDisk或者SSD能够达标就好了。
思索的几点误区:
1. 文件系统开销呢?
答:raw memory map file,可以确保每次写一个record(512 byte以内)正好一个IO
。记住一定每个记录都要fsync阿。呵呵。
2. message queue挂了怎么办?
答:多于一个串联,甚至可以跨DC partition。这也是... 阅读全帖 |
|
f*********5 发帖数: 576 | 6 stack实现queue的话,可以从push stack一次pop出数个item,放入pop stack。
然后连续对pop stack进行操作即可。。
queue实现stack的话,每次都要用一个queue开始的数个元素pop 出,放入另一个queue,
从而得到queue尾的item,取下一个的时候,又要折腾一遍。。 |
|
w****o 发帖数: 2260 | 7 好像std里queue 和stack的实现没有提供iterator,怎么遍历呢?就是说怎么查看queue
,stack里的elements?
感觉没法弄。比如queue,除非把queue给弄散了,一个一个的 front(), pop(),来查看
里面的东西,可是这样的话,queue就给破坏了。
stack也有同样的问题。
谁给说说有什么好的方法?难道要自己新创造一个实现?
谢谢! |
|
s********r 发帖数: 403 | 8 大牛不敢。
我只是写过一些简单的 non-blocking algorithm。
这些 non-blocking 算法是 Multiple-Thread Multiple Data 的编程模式,用于多核
系统,但其执行效率与体系结构,尤其是 cache 结构相关。还牵涉到 memory
consistent model。在c++11 中,很多 atomic operation 是为这个准备的。
下面的 code 仅仅代表一个思路上的描述:
void enq(Node *queue, T val)
{
Node * node = new node(val);
node->next = NULL;
Node * tail = NULL, *last = NULL;
for (;;)
{
tail = queue->gettail(); //atomic get
last = tail->next;
if (tail == queue->gettail()) //Are we still there?
{... 阅读全帖 |
|
R*****i 发帖数: 2126 | 9 我也不知道priority queue究竟是个神马鬼东西,看了维基也不知所云,queue难道不
是已经有order了嘛?也许priority queue的每个元素还有另外一个属性构成了另一个
order,所以priority queue其实是一个queue 外加一个 sorted list? |
|
I***k 发帖数: 12 | 10 如果不能用任何java api,自己完全实现一个queue
public class Queue extends Object {
public Queue(){//TODO}
public Object get(){//TODO}
public void put(){//TODO}
}
怎么实现效率比较高?
我现在的想法是还需要实现另外一个链表,借助这个链表来做Queue,对么?这个链表
做成
Queue的inner class?
class Node {
private Object data;
private Node next;
} |
|
y*h 发帖数: 107 | 11 under UNIX, 有个message queues:
如果我不知道message type for the message in the message queue, can I
still read that message out of the message queue?
第二个问题, 我想知道message queue 里面都放了些什么message without
reading messages literally out of message queue? Is there any shell script
command to do that ?
|
|
t****t 发帖数: 6806 | 12 why do you want to use queue/stack in the first place, if you don't need a
queue or stack?
in other words, queue and stack are supposed to visited FIFO or LIFO. if you
want iterator, use deque or vector; they have all the functions of queue or
stack, while having iterators.
queue |
|
t**********s 发帖数: 930 | 13 【 以下文字转载自 Java 讨论区 】
发信人: tennisalways (tennisforever), 信区: Java
标 题: 怎么把一个Map放到queue里?
发信站: BBS 未名空间站 (Wed Mar 13 07:09:10 2013, 美东)
我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
个end point读取资料一次.
我现在想对这个round trip time进行统计. 所以我将每次访问end point的时间,和相
对应的RTT生成个Map,放到个queue里,以便查找某个时间段RTT的 min/max/average.
之所以用queue,是因为我不想让数据无限增长.超过时间段就踢出去.Map里的访问时间,
就是用来决定数据是否在时间上已经expire了用的.
另外,可能多个查询程序运行.这会不会造成queue的lock?
我用个什么样的queue好呢? |
|
发帖数: 1 | 14 静态后端的concurrent queue工作了, 就像papers, 总是可以不停改进, 在再300个周
中做了.
这个queue解决了tag方式不能释放内存的问题, 这也是boost的queue的最大问题.
关于不支持dwcas的cpu架构实现在未来了, boost的实现不能在production环境中使用,
理论上tag会wrap around.
静态后端的queue实现, 可以变大, 可以变小.
boost的queue实现, 只可以变大.
程序员们,也可以变大, 也可以变小. |
|
k*******a 发帖数: 433 | 15 我知道blocking queue是queue的基础上实现多线程同时操作。
但是bounded blocking queue是啥啊?
有没有哪位大牛写的c++实现类bounded blocking queue的代码啊?
谢谢! |
|
r******r 发帖数: 700 | 16 大家都知道优先队列这个 concept 吧? For those of you who don't know, 简单的
说,就是在一个队列当中,出队的顺序是可控的,队列的设计人员可以根据任何
criteria 来决定谁排在队列的最前面。这与基于先进先出的常规队列 (queue)是不
同的。
中印 eb2/3 的排期就如一个 Priority Queue, 其设计者就是奥本海。在过去几年中,
包括 2007 年前后,奥本害通过变更这个优先队列的出队原则 (criteria),让中国的
eb23 历次受害。
比如,就最近来说,印度的 eb2 排期本来晚于 eb2c。人数大大多于中国,为什么不应
该晚些?。但在他设计的原则下,eb2i 现在与 eb2c 同步,后来居上。本来这是不合
理的,到头来我们好像还要感谢他,因为在他的原则下,只有这样 eb2c 才有可能前进
。又如,每财年开始的几个月,他使 eb2i 更快使用自己的名额,这就是变相使 eb2i
排在队列的前面,到头来 eb2c 又吃亏。
每年开始分配 SO 的时候,法律规定的基于 PD 的分配原则应该不适用,但在奥本害的
控制下,eb... 阅读全帖 |
|
t**********s 发帖数: 930 | 17 我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
个end point读取资料一次.
我现在想对这个round trip time进行统计. 所以我将每次访问end point的时间,和相
对应的RTT生成个Map,放到个queue里,以便查找某个时间段RTT的 min/max/average.
之所以用queue,是因为我不想让数据无限增长.超过时间段就踢出去.Map里的访问时间,
就是用来决定数据是否在时间上已经expire了用的.
另外,可能多个查询程序运行.这会不会造成queue的lock?
我用个什么样的queue好呢? |
|
r******h 发帖数: 248 | 18 【 以下文字转载自 Programming 讨论区 】
发信人: rockfish (rockfish), 信区: Programming
标 题: 求教: JBoss 怎么config MDB consumer queue?
发信站: BBS 未名空间站 (Fri Dec 13 11:15:11 2013, 美东)
哪位大侠说说?在JBoss5.1, 怎么找不到地方把queue server的URLconfig的地方啊,
是那个xml file?还是在console? 不是那个provider queue, 是要写一个MDB连到一
个queue server上
谢谢 |
|
b***y 发帖数: 2799 | 19 ☆─────────────────────────────────────☆
pepp (蓝调小子) 于 (Tue Sep 2 04:36:02 2008) 提到:
在写一组linux程序A、B、C,希望A发数据给B,然后B将这个数据转发给C,数据通
过message queue传递。现在遇到些问题。
首先是A向B发送数据的问题。在定义message queue id的时候,如果有其他整型变
量在之前定义,则收到第一条数据后接受方就报错(msgrcv: Identifier removed
)退出。哪怕之前定义一个无用的整型变量都会有问题。但如果改变顺序,让这个
id最先定义则没有此问题。
第二是,在实现B的时候,B要用到两个message queue分别用来接受和发送。由于上
述问题没有解决,肯定有个id是比另一个id后定义。于是后定义的id对应的那条me
ssage queue的数据接受方肯定会出错。
还请对IPC比较熟悉的兄弟多多指教。多谢!
☆─────────────────────────────────────☆
pepp (蓝调小子) 于 (Tue |
|
I**********s 发帖数: 441 | 20 不需要放入另一个queue吧, 就放入原来的queue就可以了.
queue, |
|
P***a 发帖数: 774 | 21 one queue can do stack, we don't need two queue
queue, |
|
a***e 发帖数: 413 | 22 我在word ladder里面用的两个queue来存现在的string和下一层的string。看了讨论写
了Word ladder II答案,但是unordered_set 比用queue好在哪里?还是这里用queue也
可以的。。。。。? |
|
a*******g 发帖数: 1221 | 23 经常看到这个词,现实中也没见过。system design的时候一到关键地方就说这用
priority queue,但我到现在也没明白啥是priority queue。它到底是queue还是array
还是heap还是map。譬如给你45分钟写一个,那怎么写? |
|
发帖数: 1 | 24 Priority Queue是一个抽象数据结构,类似的一些应用有急诊室叫号,Queue是先进先
出,如果在急诊室,有些挂号需要加急处理,这时候就需要用到Priority Queue。一般
implemented用heap,heap自然用array,你非要用linkedlist也可以,但效率显然不如
array。 |
|
s********k 发帖数: 6180 | 25 难道整个node就一个queue,即便一个queue,不同的layer应该也会有不同分配吧,总
不会IP层和MAC层共享一个queue吧 |
|
v*****u 发帖数: 1796 | 26 A very inefficiant method:
1. use two queue to calculate the number of elments in queue, say the number
is n
2. use one queue, deque and inque for n times to get the largest number
3. move the largest number into Q2
4. repeat step2, but this time Q1 is one size smaller than before. Until Q1
is empty |
|
d****n 发帖数: 1637 | 27 写deque的人比 写queue的人牛气。
但是写deque的人发现 好名字都被写queue的人用了。
于是写deque的人发愤图强 用实力鄙视了写queue的人。
~~你认为呢? |
|
f*******n 发帖数: 12623 | 28 deque, vector, list, etc. are real containers
queue, stack, priority_queue are container *adaptors*. They are built on top
of some other container and only allow the operations needed by their name.
"queue" only allows insertion at one end and peek removal at the other. "
stack" only allows insertion, peeking, and removal at one end. If you need
any more operations, you should just use the underlying container. For queue
the underlying container is by default deque. |
|
r******h 发帖数: 248 | 29 哪位大侠说说?在JBoss5.1, 怎么找不到地方把queue server的URLconfig的地方啊,
是那个xml file?还是在console? 不是那个provider queue, 是要写一个MDB连到一
个queue server上
谢谢 |
|
z**********g 发帖数: 2 | 30 Hi, does anybody know how peek into Unix System V message queue?
I meant the actual content of the message queue but not the control
info like last update time.
Note: Unix system V message queue is not mail server. It is
a system function allow processes to talk to each other.
It is part of IPC function.
This question is for debug purpose not for hacker, so, adminstrator,
please do not delete this message like you did before.
Thanks |
|
f**n 发帖数: 401 | 31 Can any daxia do me a favor to tell me the state-of-the-art of a G/G/1 queue?
In particular, is there a way (other than discrete event simulation) to
calculate the steady-state queue length distribution (and perhaps other
equally important distributions)?
It seems to me that, in most entry-level queueing book (Kleinrock etc),
results are limited to certain upper/lower bounds, and heavy-traffic limit
approximation. From Feller's book I learned Wiener-Hopf integral equation,
but it does not seem e |
|
|
s****e 发帖数: 7018 | 33 学挨踢的索男,都知道 queue 是队列
但是美国人从来不说queue
他们说 line up, wait in line
可见美国佬没文化 |
|
X1 发帖数: 1823 | 34 这么说吧,西方文明人站队叫queue,中国买车票排的叫line。
你可以cut in line,没听说 cut in queue |
|
f*********5 发帖数: 576 | 35 也对
我说的是2个queue实现stack,
跟一个queue的本质是一样的 |
|
i******r 发帖数: 793 | 36 我其实基本没用过stl的queue和stack
我都是这样声明的:
list queue;
vector stack;
这两个容器在stl里面是adapter
我觉得stl里面没必要实现这两个容器 |
|
h*****r 发帖数: 73 | 37 queue 和 stack 本来就不该支持遍历。
queue |
|
d****o 发帖数: 1055 | 38 queue和stack就不是用来遍历用的
queue |
|
i****y 发帖数: 84 | 39 请问如果push的时候stack1满了,那怎么办呢?是不是queue的长度达不到2倍的stack? |
|
i**********n 发帖数: 196 | 40 今天电面,写了两个stacks实现一个queue的class,我代码本身没有问题。然后烙印问
假设stack的capacity是50,如何保证queue的capacity是deterministic的。问了他好半天
deterministic具体指什么,无奈对方口音太重 我没听懂。求版上各位神牛不吝赐教。 |
|
m***p 发帖数: 86 | 41 传统做法是两个queue, 一个用于BFS, 另一个专门存储上一个level的所有node
如果只让用一个queue, 请问如何处理?
感谢指导! |
|
s**x 发帖数: 7506 | 42
this is the way, no need two queues at all.
just make sure you get the queue size before the loop. |
|
J*****n 发帖数: 137 | 43 每次遍历的时候 ,for循环的次数等于 length = queue.size(); 就是上一层的所有节
点,然后left, right 全部 offer进去就OK了. 也就是说用length来控制了每层循环
的次数,而不是用一个queue |
|
a***e 发帖数: 413 | 44 https://leetcode.com/problems/word-ladder/
如果也不用其他的如map一类来标记是否已经访问过某个词,有人只用一个queue搞定吗?
class Solution {
public:
int ladderLength(string start, string end, unordered_set &dict) {
int ns=start.size(), ne=end.size();
if (ns==0&&ne==0) return 0;
queue q;
string mid;
q.push(start);
int c=1, find=0;
while(q.empty()!=true)
{
start=q.front();
q.pop();
if ( start==end)
... 阅读全帖 |
|
|
发帖数: 1 | 46 Priority Queue就是有Priority的Queue(废话)。它是Heap在Java语言里的具体实现
。不同语言里对Heap的实现类名不同,也稍有区别。在C#里,类似的是
SortedDictionary(Dictionary是类似Java里的HashMap)。在JavaScript里,就要自己
实现或用第三方的库了。比如http://www.collectionsjs.com/heap
Java里如果不是让你自己实现PriorityQueue的话,直接拿来用就可以了。它默认实现
了最小堆,如果要用最大堆,需要定义一个Comparator,实现compare方法。如果自己
实现的话,实现的方式可以有很多种。具体就看看Heap的定义吧。 |
|
b***s 发帖数: 117 | 47 很简单,queue的意思是先进先出,priority queue也是进进出出,
不过它是找到那最最小的,先出
然后为了找最小的,用的heap来做,
而在代码里heap用一个array来表示,如果array的index从1开始的话,index i 的子节
点是 2*i 和 2*i + 1
45分钟很够了
然后,比如top k的问题,大概就是去出 k 次的意思,不过每一次出都要一个 logn 的
时间
如果赶时间,我会考虑先对top k排序,然后数据修改/添加的时候过一下heap
array |
|
l****g 发帖数: 761 | 48 因为刚刚学 Queueing System, 以前没搞过 Markov Chain
遇到问题却不知道怎么下手
因为只看到书上的例子说一个 queue system 的几个 state 之间的transition 可以通过
如下的关系式表示:
[1] ---> [2] ----> [3] ........
^------- ^---------
P1 * lamda = P2 * mu
lamda 是 input rate, mu 是 output rate
那如果一个 system 并不是总存在双向的 transition, 比如
[1] ----> [2] ------> [3]
/\ |
| |
| \/
[5]<-------------------[4]
-----------------------^
那该怎么写整个system的 balance equation呢............ |
|
s********k 发帖数: 6180 | 49 我现在只是想搞清楚整个运行过程,好比梳理一遍。只盯住某层而不管其他感觉没法串
联起来整个过程。比如我现在想知道TCP的buffer overflow在实际中究竟在哪一层的
queue(或者只有一个queue?)drop |
|
z*****n 发帖数: 7639 | 50 一般说来,queue只存在于networklayer。
在tcp和datalink layer有transmission
control window and framing/reassembling,
不过这些buffer的使用是受控的,比如说
datalink层,如果使用selective repeat,
sliding window的大小一定,network必须等待
indication才能继续向其push packet(s)。
在链路层的接收端,每成功接收一个frame后
都会立即向上层indicate(by interrupt)。
上层(即网络层)必须响应,如果queue已满,
则造成丢包。 |
|