다음 코드에서 .NET 4의 ConcurrentDictionary 및 ConcurrentQueue 클래스를 사용하고 있습니다.ConcurrentDictionary와 ConcurrentQueue의이 조합은 스레드로부터 안전한가요?
이 코드는 스레드로부터 안전한가요? 그렇지 않다면 어떻게 스레드로부터 안전하게 만들 수 있습니까?
public class Page
{
public string Name {get; set; }
}
public class PageQueue
{
private ConcurrentDictionary<int, ConcurrentQueue<Page>> pages =
new ConcurrentDictionary<int, ConcurrentQueue<Page>>();
public void Add(int id, Page page)
{
if (!this.pages.ContainsKey(id))
this.pages[id] = new ConcurrentQueue<Page>();
this.pages[id].Enqueue(page);
}
public Page GetAndRemove(int id)
{
Page lp = null;
if(this.pages.ContainsKey(id))
this.pages[id].TryDequeue(out lp);
return lp;
}
}
데모 :
public class Demo
{
public void RunAll()
{
for (int i = 0; i < 10; i++)
Task.Factory.StartNew(() => Run());
}
public void Run()
{
PageQueue pq = new PageQueue();
pq.Add(1, new Page());
pq.GetAndRemove(1);
}
}
+1 : 이것이 제가 제안하려고했던 것입니다. –
"간단합니다", 훌륭한 대답은 – RuSh