하나의 스레드에서 변수를 작성한 경우 ManualResetEvent
의 WaitOne()
메소드를 사용하여 다른 스레드가 같은 변수에 값을 할당하고 EventWaitHandel
을 신호 할 때까지 블록합니다. 첫 번째 스레드에서 변수를 읽으려고하면 다른 스레드가 할당 한 값을 항상 확보 할 수 있습니까?EventWaitHandel을 사용하는 경우 다른 스레드에서 읽을 때 하나의 스레드에서 할당 된 변수가 "스레드 안전"합니까?
(내가 아는 한 모든 메모리 장벽을 사용하지 않았기 때문에 약간의 최적화로 인해 CPU 캐시에서 값을 얻을 수 없다는 두려움이 있습니다.)
예컨대
var str = "multi-threading is hard!";
var mre = new ManualResetEvent(false);
Task.Factory.StartNew(() =>
{
str = Console.ReadLine();
mre.Set();
));
mre.WaitOne();
Console.WriteLine(str);
'WaitOne
브라이언 기드온과 한스 옆모습 함께 암시 적 메모리 장벽을 소개 .NET Framework의 여러 클래스의 좋은 목록을 넣어()'. 어디에? 나는 Console.WriteLine 전에 그것을 기대할 것이다. – Georg
그래, 그 덕분에 – markmnl