コード例 #1
0
        private static bool AwaitParked(ThreadRepository.ThreadInfo thread, long timeout, TimeUnit unit)
        {
            bool parked = false;

            for (long end = DateTimeHelper.CurrentUnixTimeMillis() + unit.toMillis(timeout); DateTimeHelper.CurrentUnixTimeMillis() < end;)
            {
                StackTraceElement frame = thread.StackTrace[0];
                if ("park".Equals(frame.MethodName) && frame.ClassName.EndsWith("Unsafe"))
                {
                    if (thread.State.name().EndsWith("WAITING"))
                    {
                        parked = true;
                        break;
                    }
                }
            }
            return(parked);
        }
コード例 #2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBlockOnLockedLock() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldBlockOnLockedLock()
        {
            // given
            LockService locks        = new ReentrantLockService();
            LockNode    lockSameNode = new LockNode(locks, 17);

            ThreadRepository.Events events = Threads.events();
            ThreadRepository.Signal ready  = Threads.signal();

            // when
            using (Lock ignored = locks.AcquireNodeLock(17, LockService_LockType.WriteLock))
            {
                ThreadRepository.ThreadInfo thread = Threads.execute(ready, lockSameNode, events.Trigger("locked"), lockSameNode.release);
                ready.AwaitNow();

                // then
                assertTrue(AwaitParked(thread, 5, TimeUnit.SECONDS));
                assertTrue(events.Snapshot().Count == 0);
            }
            events.AssertInOrder("locked");
        }