은 bool 읽기/쓰기 atomic C#
-
09-06-2019 - |
문제
은에 액세스 bool 분야 원자에서는 C#?특히,필요한가요 잠금을 주변:
class Foo
{
private bool _bar;
//... in some function on any thread (or many threads)
_bar = true;
//... same for a read
if (_bar) { ... }
}
다른 팁
으로 명시된 위 bool 은 원자 하지만 당신은 여전히 필요를 기억하는 것도에 따라 달라집니다 그것으로 할 수 있습니다.
if(b == false)
{
//do something
}
아 원자 작업을 의미하는 b 값을 변경할 수 있습기 전에 현재 실행 코드 후면 문입니다.
bool 액세스는 실제로 원하지 않는 전 이야기입니다.
당신을 걱정할 필요가 없을 읽고에 대한 값은'불완전하게 작성'-그것을 명확하지 않을 무엇을 가능성이 있는 의미에 대한 bool 에 어떤 경우-하지만 당신은 당신에 대해 걱정하는 프로세서 캐시 적어도 경우,타이밍의 세부 사항이 있는 문제입니다.만약 thread#1 에서 실행 되는 핵심은 당신 _bar
에서 캐시 _bar
을 얻에 의해 업데이트 thread#2 에서 실행되는 또 다른 핵심,thread#1 이 표시되지 않은 즉시 변경을 추가하지 않으면 잠금,선언 _bar
로 volatile
, 또는 명시적으로 삽입 통화 Thread.MemoryBarrier()
무효화하고 캐시 값입니다.
접근법으로 사용,그리고 나는 생각이 올바른가
volatile bool b = false;
.. rarely signal an update with a large state change...
lock b_lock
{
b = true;
//other;
}
... another thread ...
if(b)
{
lock b_lock
{
if(b)
{
//other stuff
b = false;
}
}
}
의 목표는 기본적으로 하는 것을 피하기 위해 repetively 잠금체에의 반복을 확인하는 경우 우리가 우리가 잠금을 제공하기 위해서는 큰 금액의 상태 정보를 변경하는 거의 발생하지 않는다.나 생각 이 방법을 작동합니다.면 절대적인 승 필요한 I 생각 휘발성이 적절할 것이 b bool.
제휴하지 않습니다 StackOverflow