Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / Util / ReadWriteObjectLock.cs / 1 / ReadWriteObjectLock.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* ReadWriteObjectLock
*
* Copyright (c) 1998-1999, Microsoft Corporation
*
*/
namespace System.Web.Util {
using System.Runtime.Serialization.Formatters;
using System.Threading;
class ReadWriteObjectLock {
// Assumption:
// -1 = a writer has the lock
// 0 = no one has the lock
// >0 = number of readers using the lock
private int _lock;
internal ReadWriteObjectLock() {
}
internal virtual void AcquireRead() {
lock(this) {
while (_lock == -1) {
try {
Monitor.Wait(this);
}
catch (ThreadInterruptedException) {
// Just keep looping
}
}
_lock++;
}
}
internal virtual void ReleaseRead() {
lock(this) {
Debug.Assert(_lock > 0);
_lock--;
if (_lock == 0) {
Monitor.PulseAll(this);
}
}
}
internal virtual void AcquireWrite() {
lock(this) {
while (_lock != 0) {
try {
Monitor.Wait(this);
}
catch (ThreadInterruptedException) {
// Just keep looping
}
}
_lock = -1;
}
}
internal virtual void ReleaseWrite() {
lock(this) {
Debug.Assert(_lock == -1);
_lock = 0;
Monitor.PulseAll(this);
}
}
/*
internal virtual void AssertReadLock() {
#if DBG
Debug.Assert(_lock > 0);
#endif
}
internal virtual void AssertWriteLock() {
#if DBG
Debug.Assert(_lock == -1);
#endif
}
*/
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListBindingConverter.cs
- DynamicPhysicalDiscoSearcher.cs
- GuidTagList.cs
- HashHelper.cs
- HtmlElement.cs
- Error.cs
- DataListItemCollection.cs
- VisualTreeHelper.cs
- DataViewManager.cs
- TreeViewBindingsEditor.cs
- WebServiceMethodData.cs
- HMACMD5.cs
- MorphHelpers.cs
- SchemaDeclBase.cs
- AxWrapperGen.cs
- BinaryReader.cs
- AddInToken.cs
- WebPartTracker.cs
- ReadOnlyKeyedCollection.cs
- ValidationUtility.cs
- AttributeData.cs
- AssemblyInfo.cs
- MultiPropertyDescriptorGridEntry.cs
- DirectoryObjectSecurity.cs
- _NegoState.cs
- NamespaceInfo.cs
- IFlowDocumentViewer.cs
- HighlightVisual.cs
- InstanceLockQueryResult.cs
- ADMembershipProvider.cs
- CodeGenerator.cs
- ColorConverter.cs
- CodeTypeReferenceExpression.cs
- QueryCursorEventArgs.cs
- RealProxy.cs
- CodeCompiler.cs
- ControlBuilder.cs
- DirectoryLocalQuery.cs
- RawStylusInputReport.cs
- PageSetupDialog.cs
- UntypedNullExpression.cs
- TimersDescriptionAttribute.cs
- StateItem.cs
- SystemInformation.cs
- CreateParams.cs
- InvalidateEvent.cs
- DatagridviewDisplayedBandsData.cs
- MatchAttribute.cs
- FacetValues.cs
- AspNetCompatibilityRequirementsAttribute.cs
- StringAnimationBase.cs
- SqlConnectionStringBuilder.cs
- wmiutil.cs
- PriorityQueue.cs
- Attributes.cs
- ResetableIterator.cs
- BoundPropertyEntry.cs
- KnownTypesProvider.cs
- CompModSwitches.cs
- NullExtension.cs
- TraceUtils.cs
- MemberBinding.cs
- XmlAggregates.cs
- NameValueFileSectionHandler.cs
- TextEditorSpelling.cs
- WebPartHeaderCloseVerb.cs
- DoubleIndependentAnimationStorage.cs
- KeyValuePairs.cs
- RenamedEventArgs.cs
- _NegotiateClient.cs
- ChannelReliableSession.cs
- WsdlImporterElement.cs
- TerminatorSinks.cs
- AxImporter.cs
- _CommandStream.cs
- Unit.cs
- CommonRemoteMemoryBlock.cs
- FlowLayoutSettings.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- MetafileHeaderEmf.cs
- DomainConstraint.cs
- TextParagraphView.cs
- StyleXamlTreeBuilder.cs
- TrackingProfile.cs
- SQLGuid.cs
- ArglessEventHandlerProxy.cs
- SqlWriter.cs
- RealizationDrawingContextWalker.cs
- Scheduling.cs
- HashSetEqualityComparer.cs
- DataGridItemCollection.cs
- UInt16.cs
- SqlBinder.cs
- oledbmetadatacollectionnames.cs
- ThreadPool.cs
- _ScatterGatherBuffers.cs
- EntityViewContainer.cs
- GiveFeedbackEventArgs.cs
- AppDomainGrammarProxy.cs
- CorrelationTokenTypeConvertor.cs