Как имитировать головоломку на тему С#

Я пытаюсь вызвать/вызвать головоломку потока, чтобы наблюдать эффекты в С#.

Может ли кто-нибудь предложить (простое) приложение, которое может быть создано для того, чтобы вызвать головокружение?

Ответы

Ответ 1

Установить приоритет потока и аффинность потока

Рабочий класс

class PriorityTest
{
    volatile bool loopSwitch;
    public PriorityTest()
    {
        loopSwitch = true;
    }

    public bool LoopSwitch
    {
        set { loopSwitch = value; }
    }

    public void ThreadMethod()
    {
        long threadCount = 0;

        while (loopSwitch)
        {
            threadCount++;
        }
        Console.WriteLine("{0} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name,
            Thread.CurrentThread.Priority.ToString(),
            threadCount.ToString("N0"));
    }
}

И проверьте

class Program
{

    static void Main(string[] args)
    {
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate =
            new ThreadStart(priorityTest.ThreadMethod);

        Thread threadOne = new Thread(startDelegate);
        threadOne.Name = "ThreadOne";
        Thread threadTwo = new Thread(startDelegate);
        threadTwo.Name = "ThreadTwo";

        threadTwo.Priority = ThreadPriority.Highest;
        threadOne.Priority = ThreadPriority.Lowest;
        threadOne.Start();
        threadTwo.Start();

        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.LoopSwitch = false;

        Console.Read();
    }
}

Код, в основном взятый из msdn, также, если у вас многоядерная система, вам может потребоваться установить affinity. Вам также может потребоваться создать больше потоков, чтобы увидеть настоящую голод.

Ответ 2

Установите сходство потоков для вашего приложения в диспетчере задач, чтобы он работал только на одном ядре. Затем запустите занятый поток в приложении с высоким приоритетом.