温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么理解C#中Queue的线程安全问题

发布时间:2021-11-11 09:24:08 来源:亿速云 阅读:417 作者:柒染 栏目:游戏开发

怎么理解C#中Queue的线程安全问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

通过集合枚举在本质上不是一个线程安全的过程。甚至在对集合进行同步处理时,其他线程仍可以修改该集合,这会导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。

下列示例说明如何同步 Queue、如何确定 Queue 是否同步以及如何使用同步的 Queue。Unity3D教程手册

using System;
                                                           
  using System.Collections;
                                                           
  public class SamplesQueue  {
                                                           
  public static void Main()  {
                                                           
  // Creates and initializes a new Queue.
                                                           
  Queue myQ = new Queue();
                                                           
  myQ.Enqueue( “The” );
                                                           
  myQ.Enqueue( “quick” );
                                                           
  myQ.Enqueue( “brown” );
                                                           
  myQ.Enqueue( “fox” );
                                                           
  // Creates a synchronized wrapper around the Queue.
                                                           
  Queue mySyncdQ = Queue.Synchronized( myQ );
                                                           
  // Displays the sychronization status of both Queues.
                                                           
  Console.WriteLine( “myQ is {0}.”, myQ.IsSynchronized ? “synchronized” : “not synchronized” );
                                                           
  Console.WriteLine( “mySyncdQ is {0}.”, mySyncdQ.IsSynchronized ? “synchronized” : “not synchronized” );
                                                           
  }
                                                           
  }

通过对比运行结果,可以明显的看出通过Queue.Synchronized方法包装的Queue被同步,没有包装的则没有被同步。可以在实例化处这样声明,

 // Creates a synchronized wrapper around the Queue.
                                                   
  Queue mySyncdQ = Queue.Synchronized( new Queue());

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI