Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielfreigabe zur Multithread-Objekterstellung in c#

Beispielfreigabe zur Multithread-Objekterstellung in c#

黄舟
黄舟Original
2017-07-27 16:16:341542Durchsuche

Der Titel dieses Artikels ist das Problem, auf das ich beim Schreiben eines Blogs im Singleton-Modus gestoßen bin. Deshalb habe ich heute eine Demo geschrieben, um mir zu helfen, mich daran zu erinnern, wie man Multithreading einfach verwendet.

Womit ich zu kämpfen hatte, ist, wie man das Objekt mehrmals in der for-Schleife instanziiert, um den Fehler mehrerer Instanzobjekte im Singleton-Modus ohne Sperre zu reproduzieren.

Lassen Sie mich Ihnen zunächst das Multithread-Instanzobjekt zeigen, das ich einfach implementiert habe.

Option 1:

Demo.cs


    public class Demo
    {        private static Demo _demo = null;        /// <summary>
        /// 构造函数        /// </summary>
        private Demo()
        {
            Console.WriteLine("构造了{0}", GetType().Name);
        }        /// <summary>
        /// 获取该类的唯一实例        /// </summary>
        /// <returns>该类的唯一实例</returns>
        public static Demo GetInstance()
        {            if (_demo == null)
                _demo = new Demo();            return _demo;
        }
    }

Program.cs, Client-Code


                Demo d1 = null;
                Demo d2 = null;                //多线程创建对象实例
                var t1 = new Thread(() => { d1 = Demo.GetInstance(); });                
                var t2 = new Thread(() => { d2 = Demo.GetInstance(); });

                t1.Start();
                t2.Start();
                Thread.Sleep(1000);//主线程等待子线程执行完成,为d1和d2变量赋值
                Console.WriteLine("d1 == d2 {0}", object.ReferenceEquals(d1, d2));
                Console.Read();

Ausgabe:

Geben Sie zwei Objekte mit unterschiedlichen Referenzen aus und erreichen Sie so das, was ich möchte.

Aber meiner Meinung nach gab es immer eine Möglichkeit für die for-Schleife, Instanzen in mehreren Threads zu erstellen, aber ich kann mich einfach nicht daran erinnern, dass ich das zufällig gesehen habe Ich werde die Informationen heute sofort aufschreiben und dann nachts Überstunden machen, um sie aufzuschreiben, damit ich mir einen Eindruck verschaffen kann.

Option 2:

Program.cs


                for (int i = 0; i < 2; i++)
                {                    
                new Action(() => { Demo.GetInstance(); }).BeginInvoke(null, null);
                }
                Console.Read();

Ausgabe:

Dies kann beim Debuggen des Singleton-Modus reproduziert werden. Der entsperrte Fehler wurde gelöst, und meine Zweifel wurden gelöst. Ich habe einen Weg gefunden, das Problem der Multithread-Instanzerstellung in einer for-Schleife zu lösen.

Das obige ist der detaillierte Inhalt vonBeispielfreigabe zur Multithread-Objekterstellung in c#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn