C# 如何在多线程环境中模拟多个指定的计算时间?

C# 如何在多线程环境中模拟多个指定的计算时间?,c#,.net,multithreading,C#,.net,Multithreading,我想在多线程环境中模拟数百次计算,比如说100毫秒 假设在四核处理器i5-3570K上进行400次100ms的计算需要10秒。400/4*100ms 第一次尝试当然是Thread.Sleep100,但在多线程环境中,这给了其他线程执行其工作的机会,而这些工作只是休眠。但是我想让处理器保持100毫秒的忙碌,而不是错过这个机会 第二次尝试是在睡眠前锁定当前线程,但这似乎也不起作用。计算时间仍然只有3秒 我已经创建了一个测试类来模拟它,但是显然我需要比当前线程上的锁更好的东西,而且我仍然希望指定计算时

我想在多线程环境中模拟数百次计算,比如说100毫秒

假设在四核处理器i5-3570K上进行400次100ms的计算需要10秒。400/4*100ms

第一次尝试当然是Thread.Sleep100,但在多线程环境中,这给了其他线程执行其工作的机会,而这些工作只是休眠。但是我想让处理器保持100毫秒的忙碌,而不是错过这个机会

第二次尝试是在睡眠前锁定当前线程,但这似乎也不起作用。计算时间仍然只有3秒

我已经创建了一个测试类来模拟它,但是显然我需要比当前线程上的锁更好的东西,而且我仍然希望指定计算时间。有什么建议吗?我能从不同的锁定机制中得到期望的结果吗

还是我应该有不同的期望?CPU利用率很低,但我不介意/我确实预料到了这一点

这是我用作原型的单元测试类的源代码

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace CalculationTimeSimulator
{
    [TestClass]
    public class CalculationTimeTests
    {
        public int CalculateMeaningOfTheUniverse()
        {
            var thread = Thread.CurrentThread;

            lock (thread)
            {
                Thread.Sleep(100);
            }

            return 42;
        }

        [TestMethod]
        public void SubtleDouglasAdamsReferenceTest()
        {
            var theAnswerTo = CalculateMeaningOfTheUniverse();

            Assert.AreEqual(42, theAnswerTo);
            // Takes 103 ms, as expected with small overhead.
        }

        [TestMethod]
        public void TryIt400Times()
        {
            var items = Enumerable.Range(1, 400);

            Parallel.ForEach<int>(items, item =>
            {
                var theAnswerTo = CalculateMeaningOfTheUniverse();

                Assert.AreEqual(42, theAnswerTo);
            });
            // Took 3 sec, but I expected 10 sec on quad core processor.
        }
    }
}

不要睡觉,试着在100毫秒还没有过去的时候工作100毫秒,什么都不要做旋转锁可能会有用。当一个100ms线程启动时,创建一个锁并锁定,自旋锁等待100ms max.spinLock的工作比预期的要好。它锁定所有线程,尽管我只希望锁定当前线程。现在需要40秒,但我想允许多核处理