积极答复者
一个读取数据的线程,一个写数据的线程,和数据缓冲的相关问题请教

问题
答案
-
private static System.Collections.Generic.Queue<string> _queue = new System.Collections.Generic.Queue<string>();
private static Object _lockobj = new Object();
写入线程:
// 入队之前要锁住
lock(_lockobj)
{
_queue.Enqueue("ABC");
}
sleep(10); // 让出CPU
读取线程:
lock(_lockobj)
{
string a = _queue.Dequeue();
}- 已标记为答案 偏僻小镇的镇长助理 2010年2月23日 9:32
全部回复
-
-
这种操作应该是一个队列吧? 我觉得用Queue 比 ArrayList 合适。
哦,好的,谢谢你的回答。
写入线程把数据入队,读取线程把数据一个个的出队。
Public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
你可以new一个Queue 出来,写入数据和读取数据时,都需要用Monitor 或者lock 把代码段锁住,然后进行入队出队操作,在解锁代码段。o
有没有相关的锁定和解锁队列的代码可以参考啊? -
private static System.Collections.Generic.Queue<string> _queue = new System.Collections.Generic.Queue<string>();
private static Object _lockobj = new Object();
写入线程:
// 入队之前要锁住
lock(_lockobj)
{
_queue.Enqueue("ABC");
}
sleep(10); // 让出CPU
读取线程:
lock(_lockobj)
{
string a = _queue.Dequeue();
}- 已标记为答案 偏僻小镇的镇长助理 2010年2月23日 9:32
-
private static System.Collections.Generic.Queue<string> _queue = new System.Collections.Generic.Queue<string>();
private static Object _lockobj = new Object();
写入线程:
// 入队之前要锁住
lock(_lockobj)
{
_queue.Enqueue("ABC");
}
sleep(10); // 让出CPU
读取线程:
lock(_lockobj)
{
string a = _queue.Dequeue();
}
好的,谢谢哦。 sleep之后,_lockobj就解锁了的是吧?