none
一个读取数据的线程,一个写数据的线程,和数据缓冲的相关问题请教 RRS feed

  • 问题

  • 我有两个线程,一个是读取数据的线程,一个是把读取来的数据写入的线程。
    我当中用的数据中专是否可采用Arraylist这样的类的实例来实现。就是每次读取来的数据add到list中,
    然后写入的线程就从list[0]中读取数据,是否可以?请指教.
    2010年2月23日 8:23

答案

  • 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日 8:38

全部回复

  • 这种操作应该是一个队列吧? 我觉得用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 把代码段锁住,然后进行入队出队操作,在解锁代码段。

    2010年2月23日 8:29
  • 这种操作应该是一个队列吧? 我觉得用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
    哦,好的,谢谢你的回答。
    有没有相关的锁定和解锁队列的代码可以参考啊?
    2010年2月23日 8:34
  • 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日 8:38
  • 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就解锁了的是吧?
    2010年2月23日 8:43
  • Michael  能否给我讲解一下 AutoResetEvent类,msdn上讲的我不是很明白啊。
    终止状态,非终止状态,如何更好的理解。
    2010年2月23日 8:47
  • 你好!
          如果你的需求是“先进先出”,可以使用Queue<T>这个类
          如果你的需求是“后进先出”,可以使用Stack<T>这个类
          这些类十分容易使用,具体你可以查询文档中的说明!
    周雪峰
    2010年2月23日 9:15
    版主
  • 你好!
         AutoResetEvent类我已经在你的另外一个帖子中作了回复,希望对你有帮助!
    周雪峰
    2010年2月23日 9:16
    版主
  • 你好!
         AutoResetEvent类我已经在你的另外一个帖子中作了回复,希望对你有帮助!
    周雪峰

    好的,谢谢。结贴!
    2010年2月23日 9:26