• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# Threading.Barrier类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中System.Threading.Barrier的典型用法代码示例。如果您正苦于以下问题:C# Barrier类的具体用法?C# Barrier怎么用?C# Barrier使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



Barrier类属于System.Threading命名空间,在下文中一共展示了Barrier类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: DownloadAllTreatmentImages

        /// <summary>
        /// Download all the images for the current session
        /// </summary>
        public void DownloadAllTreatmentImages()
        {
            Barrier barrier = new Barrier(_patient.PatientTreatment.TrainingList.Count + 2);

            Task treatmentThread = new Task(() =>
            {
                //Downloading all thumbs in treatment
                DownloadTreatment();

                barrier.SignalAndWait();
            });
            treatmentThread.Start();

            foreach(Training t in _patient.PatientTreatment.TrainingList)
            {
                Task tt = new Task(() =>
                {
                    DownloadTraining(_patient.PatientTreatment.TrainingList.IndexOf(t));
                    barrier.SignalAndWait();
                });
                tt.Start();

            }

            barrier.SignalAndWait();
            barrier.Dispose();
        }
开发者ID:amirben,项目名称:VideoTherapy,代码行数:30,代码来源:DownloadCache.cs


示例2: Main

 public void Main()
 {
     barrier = new Barrier(3);
     new Thread(Speak).Start("A");
     new Thread(Speak).Start("B");
     new Thread(Speak).Start("C");
 }
开发者ID:simonlaroche,项目名称:DumpingGrounds,代码行数:7,代码来源:BarrierSample.cs


示例3: RoutePeerMessages

        private void RoutePeerMessages(CancellationToken token, Barrier gateway)
        {
            try
            {
                using (var scaleOutFrontend = CreateScaleOutFrontendSocket())
                {
                    var localSocketIdentity = localSocketIdentityPromise.Task.Result;
                    gateway.SignalAndWait(token);

                    while (!token.IsCancellationRequested)
                    {
                        try
                        {
                            var message = (Message) scaleOutFrontend.ReceiveMessage(token);
                            if (message != null)
                            {
                                message.SetSocketIdentity(localSocketIdentity);
                                scaleOutFrontend.SendMessage(message);

                                messageTracer.ReceivedFromOtherNode(message);
                            }
                        }
                        catch (Exception err)
                        {
                            logger.Error(err);
                        }
                    }
                }
            }
            catch (Exception err)
            {
                logger.Error(err);
            }
        }
开发者ID:gitter-badger,项目名称:kino,代码行数:34,代码来源:MessageRouter.cs


示例4: Main

        static void Main()
        {
            const int numberTasks = 2;
            const int partitionSize = 1000000;
            var data = new List<string>(FillData(partitionSize * numberTasks));

            var barrier = new Barrier(numberTasks + 1);

            var taskFactory = new TaskFactory();
            var tasks = new Task<int[]>[numberTasks];
            for (int i = 0; i < numberTasks; i++)
            {
                tasks[i] = taskFactory.StartNew<int[]>(CalculationInTask,
                    Tuple.Create(i, partitionSize, barrier, data));
            }

            barrier.SignalAndWait();
            var resultCollection = tasks[0].Result.Zip(tasks[1].Result, (c1, c2) =>
                {
                    return c1 + c2;
                });

            char ch = 'a';
            int sum = 0;
            foreach (var x in resultCollection)
            {
                Console.WriteLine("{0}, count: {1}", ch++, x);
                sum += x;
            }

            Console.WriteLine("main finished {0}", sum);
            Console.WriteLine("remaining {0}, phase {1}", barrier.ParticipantsRemaining, barrier.CurrentPhaseNumber);

        }
开发者ID:ChegnduJackli,项目名称:Projects,代码行数:34,代码来源:Program.cs


示例5: TestEtw

        public void TestEtw()
        {
            using (var listener = new TestEventListener("System.Threading.Tasks.Parallel.EventSource", EventLevel.Verbose))
            {
                var events = new ConcurrentQueue<int>();
                listener.RunWithCallback(ev => events.Enqueue(ev.EventId), () => {
                    Parallel.For(0, 10000, i => { });

                    var barrier = new Barrier(2);
                    Parallel.Invoke(
                        () => barrier.SignalAndWait(),
                        () => barrier.SignalAndWait());
                });

                const int BeginLoopEventId = 1;
                const int BeginInvokeEventId = 3;
                Assert.Equal(expected: 1, actual: events.Count(i => i == BeginLoopEventId));
                Assert.Equal(expected: 1, actual: events.Count(i => i == BeginInvokeEventId));

                const int EndLoopEventId = 2;
                const int EndInvokeEventId = 4;
                Assert.Equal(expected: 1, actual: events.Count(i => i == EndLoopEventId));
                Assert.Equal(expected: 1, actual: events.Count(i => i == EndInvokeEventId));

                const int ForkEventId = 5;
                const int JoinEventId = 6;
                Assert.True(events.Count(i => i == ForkEventId) >= 1);
                Assert.Equal(events.Count(i => i == ForkEventId), events.Count(i => i == JoinEventId));
            }
        }
开发者ID:johnhhm,项目名称:corefx,代码行数:30,代码来源:EtwTests.cs


示例6: RunContext

 public RunContext( RunContextParam parameters )
 {
     GrandOutput = CreateGrandOutputWithFakeHandler( parameters.HandlerExtraLoad, parameters.UseLocalTestStrategy, parameters.DispatcherMaxCapacity );
     LoopCount = parameters.LoopCount;
     Barrier = new Barrier( parameters.PoolThreadCount + parameters.NewThreadCount + 1 );
     _newThreadCount = parameters.NewThreadCount;
 }
开发者ID:Invenietis,项目名称:ck-core,代码行数:7,代码来源:StressTests.cs


示例7: TwoInstanceDependentMethodsInvoked_Exception

        public void TwoInstanceDependentMethodsInvoked_Exception()
        {
            SingleThreadedMethodsObject o1 = new SingleThreadedMethodsObject();
            Barrier barrier = new Barrier(2);

            TestHelpers.InvokeSimultaneouslyAndWait(() => o1.InstanceDependentMethod(barrier), () => o1.InstanceDependentMethod2(barrier));
        }
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:7,代码来源:ThreadUnsafeTests.cs


示例8: Test_ClearDeadThreads

 public void Test_ClearDeadThreads()
 {
     //---------------Set up test pack-------------------
     const int BarrierTimeout = 10000;
     var dataAccessorMain = new DataAccessorInMemory();
     var dataAccessor = new DataAccessorThreadSplitter(dataAccessorMain);
     var expectedDataAccessorForThread = new DataAccessorInMemory();
     using (var entryBarrier = new Barrier(2))
     using (var exitBarrier = new Barrier(2))
     {
         var thread = new Thread(() =>
         {
             dataAccessor.AddDataAccessorForThread(expectedDataAccessorForThread);
             entryBarrier.SignalAndWait(BarrierTimeout);
             exitBarrier.SignalAndWait(BarrierTimeout);
         });
         thread.Start();
         entryBarrier.SignalAndWait(BarrierTimeout);
         //---------------Assert preconditions---------------
         Assert.AreSame(expectedDataAccessorForThread, dataAccessor.GetDataAccessorForThread(thread));
         //---------------Execute Test ----------------------
         exitBarrier.SignalAndWait(BarrierTimeout);
         thread.Join();
         dataAccessor.ClearDeadThreads();
         //---------------Test Result -----------------------
         var exception = Assert.Throws<HabaneroDeveloperException>(() => dataAccessor.GetDataAccessorForThread(thread));
         StringAssert.Contains("Data accessor for thread does not exist", exception.Message);
     }
 }
开发者ID:Chillisoft,项目名称:habanero,代码行数:29,代码来源:TestDataAccessorThreadSplitter.cs


示例9: SimpleLock_WhenDeadlocked_Throws

        public void SimpleLock_WhenDeadlocked_Throws()
        {
            object lock1 = new object();
            object lock2 = new object();
            Barrier barrier = new Barrier(2);
            Action t1 = () =>
                            {
                                lock (lock1)
                                {
                                    barrier.SignalAndWait();
                                    lock (lock2)
                                    {
                                        Thread.Sleep(100);
                                    }
                                }
                            };

            Action t2 = () =>
                            {
                                lock (lock2)
                                {
                                    barrier.SignalAndWait();
                                    lock (lock1)
                                    {
                                        Thread.Sleep(100);
                                    }
                                }
                            };

            TestHelpers.InvokeSimultaneouslyAndWaitForDeadlockDetection(t1, t2);
        }
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:31,代码来源:DetectDeadlocksTests.cs


示例10: Test_WithThread

 public void Test_WithThread()
 {
     //---------------Set up test pack-------------------
     const int BarrierTimeout = 10000;
     var dataAccessorMain = new DataAccessorInMemory();
     var dataAccessor = new DataAccessorThreadSplitter(dataAccessorMain);
     var expectedDataAccessorForThread = new DataAccessorInMemory();
     using (var entryBarrier = new Barrier(2))
     using (var exitBarrier = new Barrier(2))
     {
         var thread = new Thread(() =>
         {
             dataAccessor.AddDataAccessorForThread(expectedDataAccessorForThread);
             entryBarrier.SignalAndWait(BarrierTimeout);
             exitBarrier.SignalAndWait(BarrierTimeout);
         });
         thread.Start();
         entryBarrier.SignalAndWait(BarrierTimeout);
         //---------------Execute Test ----------------------
         var dataAccessorForThread = dataAccessor.GetDataAccessorForThread(thread);
         exitBarrier.SignalAndWait(BarrierTimeout);
         //---------------Test Result -----------------------
         Assert.AreSame(expectedDataAccessorForThread, dataAccessorForThread);
     }
 }
开发者ID:Chillisoft,项目名称:habanero,代码行数:25,代码来源:TestDataAccessorThreadSplitter.cs


示例11: Construct_GivenSemaphoreSlim_ShouldLockIt

        public void Construct_GivenSemaphoreSlim_ShouldLockIt()
        {
            //---------------Set up test pack-------------------
            using (var semaphore = new SemaphoreSlim(1))
            {
                bool? gotLock = null;
                //---------------Assert Precondition----------------
                using (new LenientAutoLocker(semaphore))
                {
                    var barrier = new Barrier(2);
                    Task.Run(() =>
                    {
                        barrier.SignalAndWait();
                        Thread.Sleep(1000);
                        // ReSharper disable once AccessToDisposedClosure
                        gotLock = semaphore.Wait(100);
                    });
                    //---------------Execute Test ----------------------
                    barrier.SignalAndWait();
                    Thread.Sleep(2000);

                    //---------------Test Result -----------------------
                    Assert.IsNotNull(gotLock);
                    Assert.IsFalse(gotLock.Value);
                }
            }
        }
开发者ID:Chillisoft,项目名称:splunk4net,代码行数:27,代码来源:TestLenientAutoLocker.cs


示例12: ParticleThreadManager

 public ParticleThreadManager()
 {
     particleThread = new Thread(new ThreadStart(Run));
     running = true;
     barrier = new Barrier(2);
     debugStrings = new List<List<string>>();
 }
开发者ID:pampersrocker,项目名称:STAR,代码行数:7,代码来源:ParticleThreadManager.cs


示例13: Barrier

        public async Task When_simultaneous_reservations_are_placed_for_one_of_a_fixed_quantity_of_a_resource_then_different_values_are_reserved()
        {
            //arrange
            var barrier = new Barrier(2);

            var reservationService = new SqlReservationService(() => new ReservationServiceDbContextThatForcesConcurrencyDuringSave(barrier));

            // given a fixed quantity of some resource, e.g. promo codes:
            var promoCode = "promo-code-" + Any.Word();
            var reservedValue1 = "firstValue:" + Any.CamelCaseName();
            var reservedValue2 = "SecondValue:" + Any.CamelCaseName();
            await reservationService.Reserve(reservedValue1, promoCode, Any.CamelCaseName(), TimeSpan.FromDays(-1));
            await reservationService.Reserve(reservedValue2, promoCode, Any.CamelCaseName(), TimeSpan.FromDays(-1));

            //act
            var result = await reservationService.ReserveAny(
                scope: promoCode,
                ownerToken: Any.FullName(),
                lease: TimeSpan.FromMinutes(2),
                confirmationToken: Any.CamelCaseName());

            var result2 = await reservationService.ReserveAny(
                scope: promoCode,
                ownerToken: Any.FullName(),
                lease: TimeSpan.FromMinutes(2),
                confirmationToken: Any.CamelCaseName());

            //assert
            result.Should().NotBe(result2);
        }
开发者ID:charlesmccarthyirl,项目名称:Its.Cqrs,代码行数:30,代码来源:SqlReservationServiceTests.cs


示例14: RegisterActors

        private void RegisterActors(CancellationToken token, Barrier gateway)
        {
            try
            {
                using (var socket = CreateOneWaySocket())
                {
                    var localSocketIdentity = localSocketIdentityPromise.Task.Result;
                    gateway.SignalAndWait(token);

                    foreach (var actor in actorRegistrationsQueue.GetConsumingEnumerable(token))
                    {
                        try
                        {
                            var registrations = actorHandlerMap.Add(actor);
                            SendActorRegistrationMessage(socket, localSocketIdentity, registrations);
                        }
                        catch (Exception err)
                        {
                            logger.Error(err);
                        }
                    }
                }
            }
            finally
            {
                actorRegistrationsQueue.Dispose();
            }
        }
开发者ID:gitter-badger,项目名称:kino,代码行数:28,代码来源:ActorHost.cs


示例15: Main

        static void Main(string[] args)
        {
            // create a barrier
            Barrier barrier = new Barrier(2);

            // create a task that will complete
            Task.Factory.StartNew(() => {
                Console.WriteLine("Good task starting phase 0");
                barrier.SignalAndWait();
                Console.WriteLine("Good task starting phase 1");
                barrier.SignalAndWait();
                Console.WriteLine("Good task completed");
            });

            // create a task that will throw an exception
            // with a selective continuation that will reduce the
            // particpant count in the barrier
            Task.Factory.StartNew(() => {
                Console.WriteLine("Bad task 1 throwing exception");
                throw new Exception();

            }).ContinueWith(antecedent => {
                // reduce the particpant count
                Console.WriteLine("Reducing the barrier participant count");
                barrier.RemoveParticipant();
            }, TaskContinuationOptions.OnlyOnFaulted);

            // wait for input before exiting
            Console.WriteLine("Press enter to finish");
            Console.ReadLine();
        }
开发者ID:clp-takekawa,项目名称:codes-from-books,代码行数:31,代码来源:Listing_13.cs


示例16: RunBarrierTest1_ctor

        /// <summary>
        /// Testing Barrier constructor
        /// </summary>
        /// <param name="initialCount">The intial barrier count</param>
        /// <param name="exceptionType">Type of the exception in case of invalid input, null for valid cases</param>
        /// <returns>Tru if the test succeeded, false otherwise</returns>
        private static bool RunBarrierTest1_ctor(int initialCount, Type exceptionType)
        {
            TestHarness.TestLog("Barrier(" + initialCount + ")");
            Exception exception = null;
            try
            {
                Barrier b = new Barrier(initialCount);
                if (b.ParticipantCount != initialCount)
                {
                    TestHarness.TestLog("Constructor failed, ParticipantCount doesn't match the initialCount.");
                    return false;
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            if (exception != null && exceptionType == null)
            {
                TestHarness.TestLog("Constructor failed, unexpected exception has been thrown.");
                return false;
            }
            if (exception != null && !Type.Equals(exceptionType, exception.GetType()))
            {
                TestHarness.TestLog("Constructor failed, exceptions types do not match.");
                return false;
            }
            TestHarness.TestLog("Constructor succeeded");
            return true;
        }
开发者ID:modulexcite,项目名称:IL2JS,代码行数:37,代码来源:BarrierTests.cs


示例17: TypeDependentStaticMethodInvokedTwice_Exception

        public void TypeDependentStaticMethodInvokedTwice_Exception()
        {
            Barrier barrier = new Barrier(2);

            TestHelpers.InvokeSimultaneouslyAndWait(() => SingleThreadedStaticMethodsObject.StaticTypeDependentMethod(barrier),
                                                    () => SingleThreadedStaticMethodsObject.StaticTypeDependentMethod(barrier));
        }
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:7,代码来源:ThreadUnsafeTests.cs


示例18: CalculatePrimesParallelWithSeparateList

        private static int[] CalculatePrimesParallelWithSeparateList(int range)
        {
            var results = new List<int>();
            var b = new Barrier(Environment.ProcessorCount + 1);
            for (var core = 0; core < Environment.ProcessorCount; ++core)
            {
                var coreX = core;
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    var threadResults = new List<int>();
                    for (var number = 3 + coreX; number < range; number += Environment.ProcessorCount)
                    {
                        var foundPrime = true;
                        for (var divisor = 2; divisor * divisor <= number; divisor++)
                            if (number % divisor == 0)
                                foundPrime = false;

                        if (foundPrime)
                        {
                            threadResults.Add(number);
                        }
                    }
                    lock (results)
                    {
                        results.AddRange(threadResults);
                    }
                    b.SignalAndWait();
                });
            }

            b.SignalAndWait();
            return results.ToArray();
        }
开发者ID:Laubeee,项目名称:ecnf,代码行数:33,代码来源:Program.cs


示例19: TestPoolContention

        public void TestPoolContention()
        {
            var barrier = new Barrier(N);
            var tasks = new Task[N];
            var totalTimesAcquired = 0;

            Assert.AreEqual(pool.maxThingId, 0);

            for (int i = 0; i < N; i++)
            {
                var t = Task.Run(() => {
                    barrier.SignalAndWait(); // Takes time for all threads to spin up
                    for (int j = 0; j < 128; j++)
                    {
                        using (var pooled = pool.GetAsync().Result) // blocks
                        {
                            Interlocked.Increment(ref totalTimesAcquired);
                        }
                    }
                });

                tasks[i] = t; // These N tasks do not yield their thread
            }

            Task.WaitAll(tasks);

            Assert.AreEqual(PoolSize, pool.maxThingId);
            Assert.AreEqual(PoolSize, pool.CurrentFreeCount);
            Assert.AreEqual(PoolSize, pool.CurrentPoolSize);
            Assert.AreEqual(N * 128, totalTimesAcquired);
        }
开发者ID:CubeCoders,项目名称:mHttp,代码行数:31,代码来源:LazyPoolMultiThreadTests.cs


示例20: CancelAfterWait

        public static bool CancelAfterWait()
        {
            TestHarness.TestLog("* BarrierCancellationTests.CancelAfterWait()");
            bool passed = true;

            CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
            CancellationToken cancellationToken = cancellationTokenSource.Token;

            const int numberParticipants = 3;
            Barrier barrier = new Barrier(numberParticipants);
            
            ThreadPool.QueueUserWorkItem(
                (args) =>
                {
                    Thread.Sleep(1000);
                    cancellationTokenSource.Cancel();
                }
                );

            //Now wait.. the wait should abort and an exception should be thrown
            passed &= TestHarnessAssert.EnsureOperationCanceledExceptionThrown(
                () => barrier.SignalAndWait(cancellationToken),
                cancellationToken, "An OCE(null) should have been thrown that references the cancellationToken.");

            //Test that backout occured.
            passed &= TestHarnessAssert.AreEqual(numberParticipants, barrier.ParticipantsRemaining,
                                                 "All participants should remain as the current one should have backout out its signal");

            // the token should not have any listeners.
            // currently we don't expose this.. but it was verified manually
            
            return passed;
        }
开发者ID:modulexcite,项目名称:IL2JS,代码行数:33,代码来源:BarrierCancellationTests.cs



注:本文中的System.Threading.Barrier类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Threading.CancellationToken类代码示例发布时间:2022-05-26
下一篇:
C# Threading.AutoResetEvent类代码示例发布时间:2022-05-26
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap