Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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.
//
//-----------------------------------------------------------------------------
/*
* 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SchemaObjectWriter.cs
- GridViewSortEventArgs.cs
- ResourceProviderFactory.cs
- CompModHelpers.cs
- SqlDependencyUtils.cs
- IResourceProvider.cs
- PropertyGeneratedEventArgs.cs
- StyleXamlParser.cs
- BaseEntityWrapper.cs
- NativeCompoundFileAPIs.cs
- WindowPatternIdentifiers.cs
- AdPostCacheSubstitution.cs
- FormatterServicesNoSerializableCheck.cs
- LinkDescriptor.cs
- X509CertificateClaimSet.cs
- WebServiceEnumData.cs
- DataServiceException.cs
- ResourceIDHelper.cs
- MediaSystem.cs
- PtsCache.cs
- PreApplicationStartMethodAttribute.cs
- MethodRental.cs
- ByeOperationCD1AsyncResult.cs
- AssemblyNameEqualityComparer.cs
- DataMisalignedException.cs
- XmlSignificantWhitespace.cs
- LabelEditEvent.cs
- BaseUriWithWildcard.cs
- MTConfigUtil.cs
- PageVisual.cs
- StringWriter.cs
- CompiledQueryCacheKey.cs
- IPCCacheManager.cs
- SmiTypedGetterSetter.cs
- EdmPropertyAttribute.cs
- EDesignUtil.cs
- FixedElement.cs
- MetadataProperty.cs
- HashMembershipCondition.cs
- OrderByBuilder.cs
- NotifyInputEventArgs.cs
- XamlWriter.cs
- FtpCachePolicyElement.cs
- SmtpLoginAuthenticationModule.cs
- SizeF.cs
- BuildManagerHost.cs
- IntranetCredentialPolicy.cs
- SafeCryptoHandles.cs
- StoreItemCollection.Loader.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- MouseGesture.cs
- ExpressionBuilderCollection.cs
- ThemeableAttribute.cs
- CacheSection.cs
- PropertyEmitter.cs
- Selector.cs
- DatasetMethodGenerator.cs
- IsolatedStorageFileStream.cs
- MarshalByRefObject.cs
- StorageBasedPackageProperties.cs
- SafeRegistryHandle.cs
- SqlNotificationEventArgs.cs
- MetricEntry.cs
- QilLiteral.cs
- ClientApiGenerator.cs
- Transform3DGroup.cs
- WebReferencesBuildProvider.cs
- ZipPackagePart.cs
- CodePropertyReferenceExpression.cs
- MultiView.cs
- RegexCompiler.cs
- BamlLocalizationDictionary.cs
- TagNameToTypeMapper.cs
- xamlnodes.cs
- Listbox.cs
- LongValidator.cs
- ShutDownListener.cs
- ConfigurationStrings.cs
- Parser.cs
- SizeF.cs
- DataTableClearEvent.cs
- Help.cs
- RightsManagementManager.cs
- PerCallInstanceContextProvider.cs
- BooleanSwitch.cs
- _SecureChannel.cs
- ArgumentOutOfRangeException.cs
- XmlWrappingReader.cs
- NegotiateStream.cs
- PageAsyncTaskManager.cs
- ResourceAssociationType.cs
- Qualifier.cs
- TextTrailingCharacterEllipsis.cs
- SqlDataSourceDesigner.cs
- ProfessionalColors.cs
- FilterQuery.cs
- XmlBuffer.cs
- XmlDownloadManager.cs
- complextypematerializer.cs
- AttributeConverter.cs