Ruby中的StringIO用于并发读写

3
我正在寻找一些类似于StringIO的类,它可以让我从程序的不同部分同时写入和读取。
我想从程序的一部分向缓冲区中写入(追加)字符,从另一部分读取它们。
StringIO的问题如下:
buffer = StringIO.new
buffer.write "Foobar"      # Write to the buffer
buffer.rewind              # Move the pointer to beginning
buffer.getc                #=> F
buffer.getc                #=> o

buffer.write("something")  # Write more to the buffer
buffer.string              #=> Fosomething
buffer.getc                #=> nil
buffer.pos                 #=> 11

每当我向缓冲区写入时,它会被写入到当前位置。然后该位置移动到最后写入的字符。
我需要一个具有两个单独的读写位置的StringBuffer,而不是只有一个。Ruby中是否存在这样的东西,还是我必须自己实现?

在MRI中,跨线程改变共享变量是不确定的。 - Anthony
2个回答

2
你应该考虑使用一个队列。如果不需要线程安全,那么一个简单的数组也可能是可以的。

我会接受这个答案,因为这可能是对其他人有用的好方法,即使它对我没有起作用。 我正在编写一个解释器,有时解释器需要更多的输入。 在这种情况下,我只需向用户请求更多的输入即可。 队列无法正常工作,因为如果队列为空,我的读取线程将会失败。 - 0xAffe

0
如果你的程序是单线程的,可以尝试使用协程(coroutines),也称为块(blocks)。
def do_stuff
  yield rand(100)
end

100.times do
  do_stuff { |response| puts response }
end


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接