안녕하세요?
항상 도움주셔서 감사합니다.
아래와 같이 스레드와 스레드 안전한 객체를 사용할 때
여러개의 스레드가 실행될 때 DoWork는 한번만 실행되는 것을 보장 받을 수 있을까요?
//스레드 공용 static 변수
ConcurrentBag<string> cb = new ConcurrentBag<string>();
//아래 스레드는 여러개 실행
Task.Run(() =>
{
if(!cb.Contains("Completed"))
{
cb.Add("Completed");
//DoWork(스레드에 대해서 한번만 작업)
}
});
아니면 아래와 같이 lock(this) 동기화 객체같은걸로 동기화를 해야할까요?
Task.Run(() =>
{
lock(this){
if(!cb.Contains("Completed"))
{
cb.Add("Completed");
//DoWork(스레드에 대해서 한번만 작업)
}
}
});
아니면 DoWork작업을 다중스레드에서 한번만 실행할 수 있는 다른 좋은 방법이 있는지 궁금합니다.
감사합니다.
[최초 등록일: ]
[최종 수정일: 9/19/2022]