[c#] watki, syncrhonizacja

0

Mam taki kod z ksiazki

public void Increment()
        {
            while(counter < 1000)
            {
                int t = Interlocked.Increment(ref counter);
                Thread.Sleep(1);
                counter = t;
                Console.WriteLine("Increment {0}: ", counter);
                
            }
        }
        
        public static void Main(String[] args)
        {
            Program p = new Program();
            p.Run();

        }
        public void Run()
        {
            Thread t1 = new Thread(new ThreadStart(Increment));
            Thread t2 = new Thread(new ThreadStart(Increment));
            t1.IsBackground = true;
            t2.IsBackground = true;
            t1.Start();
            t2.Start();
            t1.Join();
            t2.Join();
            System.Console.WriteLine("Threads have stopped doing blowjobs.");
            System.Console.ReadLine();
        }
        private int counter = 0;
    }

wynik powinien byc

1
2
3
4

a jest

1
2
2
3
4
4
5
5

etc

0

Jeśli to dobrze przepisałeś to dziwna ta książka (jaka?).
Join powinien być wywołany z jednego z działających wątków, a nie z wątku głównego (oczywiście jeśli chcesz osiągnąć wynik taki jaki podałeś)

0

Join jest OK, Increment jest źle.

        public void Increment()
        {
            while(counter < 1000)
            {
                int t = Interlocked.Increment(ref counter);
                Console.WriteLine("Increment {0}: ", t);
                Thread.Sleep(1);
            }
        }

Zwróć uwagę też, że nie ma pewności, że liczby będą wyświetlane w kolejności. Ale przynajmniej nie powinny się teraz powtarzać.

0

"Threads have stopped doing blowjobs."

serio tak pisało w książce?

1 użytkowników online, w tym zalogowanych: 0, gości: 1