본문 바로가기
개발/기본) 기본기

c#) volatile 키워드

by 테샤르 2023. 11. 8.

volatile 키워드

 

volatile 키워드는 동시에 실행되는 여러 스레드에 의해 필드가 수정될 수 있음을 나타내는 키워드로 

참조 형식으로 class, structure 필드에서만 사용이 가능하다.

 

 컴파일러, 런타임 시스템 및 하드웨어는 성능상의 이유로 메모리 위치에 대한 읽기 및 쓰기를 다시 정렬할 수 있고

volatile로 선언된 필드는 특정 종류의 최적화에서 제외된다고 한다.

모든 실행 스레드에서처럼 휘발성 쓰기의 단일 순서가 모두 보장되는 것은 아니기 때문에 사용할때 조심히 사용해야 한다.

 

반응형

 

< 예시 코드 >

using System;
using System.Threading;

class Program
{
    // Define a volatile field
    private static volatile bool isRunning = true;

    static void Main()
    {
        // Start a new thread that modifies the volatile field
        Thread t = new Thread(ModifyField);
        t.Start();

        // Main thread reads the volatile field
        while (isRunning)
        {
            Console.WriteLine("Main thread is running...");
            Thread.Sleep(1000);
        }

        Console.WriteLine("Main thread exiting.");
    }

    static void ModifyField()
    {
        // Simulate some work
        Thread.Sleep(3000);

        // Modify the volatile field
        isRunning = false;

        Console.WriteLine("Secondary thread has modified the field.");
    }
}

 

volatile 는 대체적으로 멀티 스레딩 환경에서의 변수를 사용하는 것으로 

여러 스레드가 병렬로 사용할때 각자의 스레드는 캐시를 가지고 있어서 다른 스레드가 접근을 못한다. 그럴때 volatile 으로 선언하게 되면 항상 메인 메모리에서 값을 쓰도록 보장이 가능하다.

 

volatile을 사용해서 스레딩의 순서를 보장하거나 값을 참고해서 중복된 작업을 방지할 수 있다.

 

C# Volatile : [링크]

 

volatile - C# 참조 - C#

volatile - C# 참조

learn.microsoft.com

 

★☆☆☆☆   

 

반응형

댓글