none
关于多线程共享资源的问题 RRS feed

  • 问题

  • 一个线程用while(true)循环接收远程主机的数据

      public void Recv()
            {
                udpClient = new UdpClient(port);
                udpClient.Client.ReceiveBufferSize = 1024 * 1024 * 1024; 
                try
                {
                    while (true)
                    {
                        byte[] bytes = udpClient.Receive(ref remote); 
                    }
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.ToString());
                }
             }

    ,把该数据bytes放入三个缓冲区(队列)以供不同的功能模块取用(所以三个缓冲区的取用速度等都是不一样的,三个缓冲区是相互独立的)...该怎么实现这个功能呢  

    2013年5月28日 11:56

答案

  • 我 这里没有从代码上看出 为什么你会说队列一满了, 就不能入队二三了。

    当你入队一的时候,应该只是判断队一满还不是不满,不入队,不做任何操作。然后操作队列二。你可能会说,当三队都满了 就应该停止循环。那么 你可以试试如下 逻辑:

                    while (true)
                    {
                        if(fullQueueNumber != 3)
                            byte[] bytes = udpClient.Receive(ref remote); 
                        if(queue1 is full)
                           fullQueueNumber +=1;
                        else
                            队列一入队;fullQueueNumber -=1;
                        if(queue2 is full)
                           fullQueueNumber +=1;
                        else
                            队列二入队;fullQueueNumber -=1;
                        if(queue3 is full)
                           fullQueueNumber +=1;
                        else
                            队列三入队;fullQueueNumber -=1;
                    }

    希望有用。


    Mike Feng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 茕茕 2013年5月31日 6:59
    2013年5月29日 6:47
    版主

全部回复

  • 一个线程用while(true)循环接收远程主机的数据

      public void Recv()
            {
                udpClient = new UdpClient(port);
                udpClient.Client.ReceiveBufferSize = 1024 * 1024 * 1024; 
                try
                {
                    while (true)
                    {
                        byte[] bytes = udpClient.Receive(ref remote); 
                    }
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.ToString());
                }
             }

    ,把该数据bytes放入三个缓冲区(队列)以供不同的功能模块取用(所以三个缓冲区的取用速度等都是不一样的,三个缓冲区是相互独立的)...该怎么实现这个功能呢  

    注意 这个缓冲区是预先定义好的 如果缓冲区满了就阻塞禁止加入队列。如果如下:会出现一种情况 就是如果队列一满了阻塞了会影响后面的队列二 三 ;怎么让这三个队列互不影响

      public void Recv()
            {
                udpClient = new UdpClient(port);
                udpClient.Client.ReceiveBufferSize = 1024 * 1024 * 1024; 
                try
                {
                    while (true)
                    {
                        byte[] bytes = udpClient.Receive(ref remote); 
                        队列一入队;
                        队列二入队;
                        队列三入队;
                    }
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.ToString());
                }
             }
    2013年5月28日 12:36
  • 我 这里没有从代码上看出 为什么你会说队列一满了, 就不能入队二三了。

    当你入队一的时候,应该只是判断队一满还不是不满,不入队,不做任何操作。然后操作队列二。你可能会说,当三队都满了 就应该停止循环。那么 你可以试试如下 逻辑:

                    while (true)
                    {
                        if(fullQueueNumber != 3)
                            byte[] bytes = udpClient.Receive(ref remote); 
                        if(queue1 is full)
                           fullQueueNumber +=1;
                        else
                            队列一入队;fullQueueNumber -=1;
                        if(queue2 is full)
                           fullQueueNumber +=1;
                        else
                            队列二入队;fullQueueNumber -=1;
                        if(queue3 is full)
                           fullQueueNumber +=1;
                        else
                            队列三入队;fullQueueNumber -=1;
                    }

    希望有用。


    Mike Feng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 茕茕 2013年5月31日 6:59
    2013年5月29日 6:47
    版主