검색결과 리스트
글
volatile 키워드는 동시에 실행 중인 여러 스레드에 의해 필드가 수정될 수 있음을 나타냅니다. volatile로 선언된 필드에는 단일 스레드를 통한 액세스를 전제로 하는 컴파일러 최적화가 적용되지 않습니다. 이렇게 하면 필드의 값을 항상 최신 상태로 유지할 수 있습니다.
일반적으로 volatile 한정자는 액세스를 serialize할 때 lock 문을 사용하지 않고 여러 스레드에서 액세스하는 필드에 사용됩니다.
volatile 키워드는 다음과 같은 형식의 필드에 적용할 수 있습니다.
-
참조 형식
-
안전하지 않은 컨텍스트의 포인터 형식. 포인터 자체는 volatile일 수 있지만 포인터가 가리키는 개체는 volatile일 수 없습니다. 즉, "volatile 개체에 대한 포인터"를 선언할 수 없습니다.
-
sbyte, byte, short, ushort, int, uint, char, float 및 bool 같은 정수 계열 형식
-
정수 계열 형식을 기반으로 한 열거형
-
참조 형식으로 알려진 제네릭 형식 매개 변수
volatile 키워드는 클래스 또는 구조체의 필드에만 적용할 수 있습니다. 지역 변수는 volatile로 선언할 수 없습니다.
[예제]
// csharp_volatile.cs
// Compile with: /target:library
class Test
{
public volatile int i;
Test(int _i)
{
i = _i;
}
}
출처 : MSDN
설정
트랙백
댓글
글
싱글턴 패턴을 보다가 신기한 것을 알았다 -_-
Syncronized를 할 경우 멀티 스레딩의 경우 효율적이지 못한 결과가 일어난다.
성능 저하를 말하는 것이다.
하지만 -_- DCL..
요놈을 이용하면 된답 -_-
이것은 인스턴스가 생성 되었는지 확인하고 난 다음 생성되지 않을때만 동기화를 한다
하지만 요놈은.. 1.4버전 이전은.. 되지 않는답 ㅠㅡㅠ
다음은 그 간단한 코드 예이다
public class Test{
private volatile static Test t;
private Test(){}
public static Test getInstance(){
if(t==null){
syncronized(Test.class){
if(t==null){
t = new Test();
}
}
}
}
}
Syncronized를 할 경우 멀티 스레딩의 경우 효율적이지 못한 결과가 일어난다.
성능 저하를 말하는 것이다.
하지만 -_- DCL..
요놈을 이용하면 된답 -_-
이것은 인스턴스가 생성 되었는지 확인하고 난 다음 생성되지 않을때만 동기화를 한다
하지만 요놈은.. 1.4버전 이전은.. 되지 않는답 ㅠㅡㅠ
다음은 그 간단한 코드 예이다
public class Test{
private volatile static Test t;
private Test(){}
public static Test getInstance(){
if(t==null){
syncronized(Test.class){
if(t==null){
t = new Test();
}
}
}
}
}
설정
트랙백
댓글
글
스레드 생성에는 Thread,ThreadPool,Timer Class를 이용한 세가지 방법이 존재한다.
여기서 Thread Class를 이용한 스레드는 과도한 문맥전환의 문제가 있을 수 있다.
이에 ThreadPool Class는 Pool을 구성하고 적정량의 스레드를 수용함으로
Thread Class를 이용한 것보다 좀 더 안정적이다.
Timer Class의 경우는 일정 시간마다 스레드를 자동으로 활성화 해 준다.
1.Thread Class
Thread th = new Thread(new ThreadStart(대상));
2. ThreadPool Class
ThreadPool.QueueUserWorkItem(new WaitCallBack(대상,null);
3. Timer Class
Timer timer = new Timer(new TimerCallBack(대상),null,시간,100);
여기서 Thread Class를 이용한 스레드는 과도한 문맥전환의 문제가 있을 수 있다.
이에 ThreadPool Class는 Pool을 구성하고 적정량의 스레드를 수용함으로
Thread Class를 이용한 것보다 좀 더 안정적이다.
Timer Class의 경우는 일정 시간마다 스레드를 자동으로 활성화 해 준다.
1.Thread Class
Thread th = new Thread(new ThreadStart(대상));
2. ThreadPool Class
ThreadPool.QueueUserWorkItem(new WaitCallBack(대상,null);
3. Timer Class
Timer timer = new Timer(new TimerCallBack(대상),null,시간,100);
RECENT COMMENT