C# Java의 동기화된 키워드 버전?
c#는 자바 고유의 "동기화" 키워드를 가지고 있는가?
즉, Java에서는 다음과 같이 기능, 객체 또는 코드 블록으로 지정할 수 있다.
public synchronized void doImportantStuff() {
// dangerous code goes here.
}
또는
public void doImportantStuff() {
// trivial stuff
synchronized(someLock) {
// dangerous code goes here.
}
}
첫째, 대부분의 수업은 절대 안전할 필요가 없을 것이다.YAGNI 사용: 실제로 사용할 것임을 알고 있을 때만(그리고 테스트할 때) 나사산 안전성을 적용한다.
방법 수준의 것에는 다음과 같은 것들이 있다.[MethodImpl]
:
[MethodImpl(MethodImplOptions.Synchronized)]
public void SomeMethod() {/* code */}
접근자(속성 및 이벤트):
private int i;
public int SomeProperty
{
[MethodImpl(MethodImplOptions.Synchronized)]
get { return i; }
[MethodImpl(MethodImplOptions.Synchronized)]
set { i = value; }
}
필드 유사 이벤트는 기본적으로 동기화되지만 자동 구현 속성은 다음과 같지 않다는 점에 유의하십시오.
public int SomeProperty {get;set;} // not synchronized
public event EventHandler SomeEvent; // synchronized
개인적으로, 나는 의 시행이 마음에 들지 않는다.MethodImpl
그대로this
또는typeof(Foo)
- 모범 사례에 반하는 행위.선호하는 옵션은 자신의 잠금 장치를 사용하는 것이다.
private readonly object syncLock = new object();
public void SomeMethod() {
lock(syncLock) { /* code */ }
}
필드 유사 이벤트의 경우 잠금 구현은 컴파일러에 따라 달라지며, 오래된 마이크로소프트 컴파일러에서는lock(this)
/lock(Type)
그러나 최신 컴파일러에서는 업데이트를 사용하기 때문에 고약한 부분 없이도 나사산이 안전하다.
이를 통해 보다 세분화된 사용 및Monitor.Wait
/Monitor.Pulse
기타 나사산 간 통신
static object Lock = new object();
lock (Lock)
{
// do stuff
}
c#는 자바 고유의 "동기화" 키워드를 가지고 있는가?
아니, C#에서 넌 분명히lock
비동기 스레드 간에 동기식으로 작업할 리소스. lock
블록을 열어라. 방법 수준에서는 작동하지 않는다.
그러나, 기본적인 메커니즘은 그 이후로 유사하다.lock
(이후로)를 호출하여 작업함.Monitor.Exit
런타임에 .태양 문서에 따르면 자바도 같은 방식으로 작동한다.
전체 경로를 통해 다음 줄을 확인하십시오.[MethodImpl(MethodImplOptions.Synchronized)]
처럼 보여야 한다
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)]
당신은 그것을 사용할 수 있다.lock
대신 명세서이것은 두 번째 버전만 대체할 수 있을 것 같아.또한, 두 가지 모두synchronized
그리고lock
물체를 수술할 필요가 있다.
참조URL: https://stackoverflow.com/questions/541194/c-sharp-version-of-javas-synchronized-keyword
'IT이야기' 카테고리의 다른 글
Vue.js 상위 항목에서 하위 구성 요소 데이터 업데이트 (0) | 2022.05.22 |
---|---|
Vuex를 사용할 때 내 Vue 앱에서 jwt의 혜택을 받을 수 있을까? (0) | 2022.05.22 |
:change와 v-on:vuejs의 차이점은? (0) | 2022.05.21 |
입력 텍스트 Vue.js 2를 기준으로 목록 필터링 (0) | 2022.05.21 |
Vue.js - 웹 팩이 없는 Vuex? (0) | 2022.05.21 |