public void EnterReadLockTest() { ReaderWriterLockSlim readerWriterLockSlim = null; // TODO: 初始化为适当的值 ReaderWriterLockSlimEx.EnterReadLock(readerWriterLockSlim); Assert.Inconclusive("无法验证不返回值的方法。"); }
/// <summary> /// /// </summary> internal void Slice() { bool bIsChange = false; // 检查是否已经在处理Slice(...)的调用 if (ReaderWriterLockSlimEx.QuickTryEnterWriteLock(m_LockInSliceWaitExecute) == false) { return; } { if (m_InSliceWaitExecute == false) // 没有锁定 { bIsChange = m_InSliceWaitExecute = true; } } m_LockInSliceWaitExecute.ExitWriteLock(); // 已经在处理Slice(...)中 if (bIsChange == false && m_InSliceWaitExecute) { return; } IWaitExecuteInfo[] waitExecuteArray = null; do { waitExecuteArray = null; m_LocksWaitExecuteQueue.EnterWriteLock(); { if (m_WaitExecuteQueue.Count > 0) { waitExecuteArray = m_WaitExecuteQueue.ToArray(); m_WaitExecuteQueue.Clear(); } } m_LocksWaitExecuteQueue.ExitWriteLock(); if (waitExecuteArray == null) { break; } for (int iIndex = 0; iIndex < waitExecuteArray.Length; iIndex++) { waitExecuteArray[iIndex].Execute(); } } while (waitExecuteArray != null); // 可能执行的时间比较长 所以再检测一下是不是还有 // 已经处理完Slice(...)的调用 m_LockInSliceWaitExecute.EnterWriteLock(); { m_InSliceWaitExecute = false; } m_LockInSliceWaitExecute.ExitWriteLock(); }
public void TryEnterReadLockTest() { ReaderWriterLockSlim readerWriterLockSlim = null; // TODO: 初始化为适当的值 bool expected = false; // TODO: 初始化为适当的值 bool actual; actual = ReaderWriterLockSlimEx.TryEnterReadLock(readerWriterLockSlim); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="eventArgs"></param> public void DeactivateSpaceNode(object sender, DeactivateSpaceNodeEventArgs eventArgs) { MapSpaceNode mapSpaceNode = eventArgs.SpaceNode; Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - mapSpaceNode == null error!"); ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes); { this.DeactivateSelfSpaceNode(mapSpaceNode); } ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes); }
/// <summary> /// /// </summary> /// <param name="packet"></param> public void AddUpdateData(Packet packet, uint uiUpdateCount) { ReaderWriterLockSlimEx.EnterWriteLock(m_LockUpdatePacket); { m_UpdatePacket.Write(packet); packet.Release(); m_UpdateCount += uiUpdateCount; } ReaderWriterLockSlimEx.ExitWriteLock(m_LockUpdatePacket); }
/// <summary> /// /// </summary> public void SendUpdates() { ReaderWriterLockSlimEx.EnterWriteLock(m_LockUpdatePacket); { m_UpdatePacket.EndWrite(m_UpdateCount); m_UpdateCount = 0; base.NetState.Send(m_UpdatePacket); m_UpdatePacket = new UpdatePacket(); } ReaderWriterLockSlimEx.ExitWriteLock(m_LockUpdatePacket); }
/// <summary> /// /// </summary> private void CheckDeactivateSpaceNode() { List <MapSpaceNode> mapSpaceNodeList = new List <MapSpaceNode>(LIST_CAPACITY_SIZE); ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes); { foreach (KeyValuePair <MapSpaceNode, MapSpaceNode> keyValuePair in m_DeactivateSpaceNodes) { mapSpaceNodeList.Add(keyValuePair.Key); } } ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes); foreach (MapSpaceNode mapSpaceNode in mapSpaceNodeList) { this.CheckToDeadSpaceNode(mapSpaceNode); } }
/// <summary> /// /// </summary> /// <param name="mapSpaceNode"></param> public void CheckToDeadSpaceNode(MapSpaceNode mapSpaceNode) { Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - mapSpaceNode == null error!"); MapSpaceNode parentMapSpaceNode = mapSpaceNode.Parent; Debug.Assert(parentMapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - parentMapSpaceNode == null error!"); ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes); { do { MapSpaceNode outValue = null; if (m_DeactivateSpaceNodes.TryGetValue(mapSpaceNode, out outValue) == false) { break; } int iGridCellPointX = parentMapSpaceNode.RankIndex.Rank0Index * MAX_NUMBER_OF_CELLS; int iGridCellPointY = parentMapSpaceNode.RankIndex.Rank1Index * MAX_NUMBER_OF_CELLS; MapSpaceNode subSpaceNode1 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); ; if (subSpaceNode1 != null && this.IsDeadOrDeactivate(subSpaceNode1) == false) { break; } MapSpaceNode subSpaceNode2 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); ; if (subSpaceNode2 != null && this.IsDeadOrDeactivate(subSpaceNode2) == false) { break; } MapSpaceNode subSpaceNode3 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); ; if (subSpaceNode3 != null && this.IsDeadOrDeactivate(subSpaceNode3) == false) { break; } MapSpaceNode subSpaceNode4 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner); ; if (subSpaceNode4 != null && this.IsDeadOrDeactivate(subSpaceNode4) == false) { break; } // DeactivateSpaceNode5 == SelfSpaceNode MapSpaceNode subSpaceNode6 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner); ; if (subSpaceNode6 != null && this.IsDeadOrDeactivate(subSpaceNode6) == false) { break; } MapSpaceNode subSpaceNode7 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); if (subSpaceNode7 != null && this.IsDeadOrDeactivate(subSpaceNode7) == false) { break; } MapSpaceNode subSpaceNode8 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); ; if (subSpaceNode8 != null && this.IsDeadOrDeactivate(subSpaceNode8) == false) { break; } MapSpaceNode subSpaceNode9 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); ; if (subSpaceNode9 != null && this.IsDeadOrDeactivate(subSpaceNode9) == false) { break; } // All DeadOrDeactivate this.DeadSelfSpaceNode(mapSpaceNode); } while (false); } ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="eventArgs"></param> public void ActivateSpaceNode(object sender, ActivateSpaceNodeEventArgs eventArgs) { MapSpaceNode mapSpaceNode = eventArgs.SpaceNode; Debug.Assert(mapSpaceNode != null, "PartitionSpaceStrategy.ActivateSpaceNode(...) - mapSpaceNode == null error!"); MapSpaceNode parentMapSpaceNode = mapSpaceNode.Parent; Debug.Assert(parentMapSpaceNode != null, "PartitionSpaceStrategy.ActivateSpaceNode(...) - parentMapSpaceNode == null error!"); ReaderWriterLockSlimEx.EnterWriteLock(m_LockAllSpaceNodes); { // 激活自己 this.ActivateSelfSpaceNode(mapSpaceNode); int iGridCellPointX = parentMapSpaceNode.RankIndex.Rank0Index * MAX_NUMBER_OF_CELLS; int iGridCellPointY = parentMapSpaceNode.RankIndex.Rank1Index * MAX_NUMBER_OF_CELLS; // ActivateSpaceNode1 MapSpaceNode subSpaceNode1 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); if (subSpaceNode1 != null) { this.ActivateNearSpaceNode(subSpaceNode1); } // ActivateSpaceNode2 MapSpaceNode subSpaceNode2 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); if (subSpaceNode2 != null) { this.ActivateNearSpaceNode(subSpaceNode2); } // ActivateSpaceNode3 MapSpaceNode subSpaceNode3 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner); if (subSpaceNode3 != null) { this.ActivateNearSpaceNode(subSpaceNode3); } // ActivateSpaceNode4 MapSpaceNode subSpaceNode4 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner); if (subSpaceNode4 != null) { this.ActivateNearSpaceNode(subSpaceNode4); } // ActivateSpaceNode5 == SelfSpaceNode // ActivateSpaceNode6 MapSpaceNode subSpaceNode6 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner); if (subSpaceNode6 != null) { this.ActivateNearSpaceNode(subSpaceNode6); } // ActivateSpaceNode7 MapSpaceNode subSpaceNode7 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); if (subSpaceNode7 != null) { this.ActivateNearSpaceNode(subSpaceNode7); } // ActivateSpaceNode8 MapSpaceNode subSpaceNode8 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); if (subSpaceNode8 != null) { this.ActivateNearSpaceNode(subSpaceNode8); } // ActivateSpaceNode9 MapSpaceNode subSpaceNode9 = this.GetSubSpaceNode(iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner); if (subSpaceNode9 != null) { this.ActivateNearSpaceNode(subSpaceNode9); } } ReaderWriterLockSlimEx.ExitWriteLock(m_LockAllSpaceNodes); }