ADD week 5
This commit is contained in:
		
							
								
								
									
										64
									
								
								02-Easy5/E5/sources/kotlin/concurrent/LocksKt.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								02-Easy5/E5/sources/kotlin/concurrent/LocksKt.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| package kotlin.concurrent; | ||||
|  | ||||
| import java.util.concurrent.locks.Lock; | ||||
| import java.util.concurrent.locks.ReentrantReadWriteLock; | ||||
| import kotlin.Metadata; | ||||
| import kotlin.jvm.functions.Function0; | ||||
| import kotlin.jvm.internal.InlineMarker; | ||||
| import kotlin.jvm.internal.Intrinsics; | ||||
|  | ||||
| /* compiled from: Locks.kt */ | ||||
| @Metadata(d1 = {"\u0000\u001a\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\u001a6\u0010\u0000\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00022\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\u0005\u001a6\u0010\u0006\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00072\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\b\u001a6\u0010\t\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00022\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\u0005\u0082\u0002\u0007\n\u0005\b\u009920\u0001¨\u0006\n"}, d2 = {"read", "T", "Ljava/util/concurrent/locks/ReentrantReadWriteLock;", "action", "Lkotlin/Function0;", "(Ljava/util/concurrent/locks/ReentrantReadWriteLock;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;", "withLock", "Ljava/util/concurrent/locks/Lock;", "(Ljava/util/concurrent/locks/Lock;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;", "write", "kotlin-stdlib"}, k = 2, mv = {1, 8, 0}, xi = 48) | ||||
| /* loaded from: classes.dex */ | ||||
| public final class LocksKt { | ||||
|     private static final <T> T withLock(Lock lock, Function0<? extends T> action) { | ||||
|         Intrinsics.checkNotNullParameter(lock, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         lock.lock(); | ||||
|         try { | ||||
|             return action.invoke(); | ||||
|         } finally { | ||||
|             InlineMarker.finallyStart(1); | ||||
|             lock.unlock(); | ||||
|             InlineMarker.finallyEnd(1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final <T> T read(ReentrantReadWriteLock reentrantReadWriteLock, Function0<? extends T> action) { | ||||
|         Intrinsics.checkNotNullParameter(reentrantReadWriteLock, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); | ||||
|         readLock.lock(); | ||||
|         try { | ||||
|             return action.invoke(); | ||||
|         } finally { | ||||
|             InlineMarker.finallyStart(1); | ||||
|             readLock.unlock(); | ||||
|             InlineMarker.finallyEnd(1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static final <T> T write(ReentrantReadWriteLock reentrantReadWriteLock, Function0<? extends T> action) { | ||||
|         Intrinsics.checkNotNullParameter(reentrantReadWriteLock, "<this>"); | ||||
|         Intrinsics.checkNotNullParameter(action, "action"); | ||||
|         ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); | ||||
|         int i = 0; | ||||
|         int readHoldCount = reentrantReadWriteLock.getWriteHoldCount() == 0 ? reentrantReadWriteLock.getReadHoldCount() : 0; | ||||
|         for (int i2 = 0; i2 < readHoldCount; i2++) { | ||||
|             readLock.unlock(); | ||||
|         } | ||||
|         ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock(); | ||||
|         writeLock.lock(); | ||||
|         try { | ||||
|             return action.invoke(); | ||||
|         } finally { | ||||
|             InlineMarker.finallyStart(1); | ||||
|             while (i < readHoldCount) { | ||||
|                 readLock.lock(); | ||||
|                 i++; | ||||
|             } | ||||
|             writeLock.unlock(); | ||||
|             InlineMarker.finallyEnd(1); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user