개체 (예 : 문자열)를 생성하는 스레드와 개체를 사용하는 단일 스레드 (예 : 원격 서버를 직렬화하고 원격 서버를 보내는)가 있습니다.여러 프로듀서와 단일 소비자를 사용하는 컬렉션은 무엇입니까?
제작자가 가능한 한 빨리 데이터를 피할 수 있기를 바랍니다. 그들은 소비자가 아닌 다른 생산자 때문에 절대 절대로 안됩니다. 이것이 가능한가? 방법?
개체 (예 : 문자열)를 생성하는 스레드와 개체를 사용하는 단일 스레드 (예 : 원격 서버를 직렬화하고 원격 서버를 보내는)가 있습니다.여러 프로듀서와 단일 소비자를 사용하는 컬렉션은 무엇입니까?
제작자가 가능한 한 빨리 데이터를 피할 수 있기를 바랍니다. 그들은 소비자가 아닌 다른 생산자 때문에 절대 절대로 안됩니다. 이것이 가능한가? 방법?
BlockingCollection을 사용할 수 있습니다. 기본값은 ConcurrentQueue
입니다. 생산자 - 소비자 패턴의
구현 :
BlockingCollection는 다음과 같은 기능을 제공하는 스레드 안전 컬렉션 클래스입니다.
여러 스레드에서 동시 항목 추가 및 가져 오기.
추가시 BlockingCollection이 차단됩니까? 물론 무제한이라고 가정합니다. – Gatis
이것은 'ConcurrentQueue'에 대한 일이지만, "* never should lock *"요구 사항은 약간 분명하지 않습니다. 다중 스레드로 작업하고 다중 스레드로 접근 가능한 컬렉션을 만들려고하는 경우에는 반드시 잠금이 필요합니다. –
아마도 'BlockingCollection'입니까? 너는 무엇을 의미하니? 스레드 보안 * 문제는 어떨까요? –
ConcurrentBag는이 스레드 목록에 대한 개념을 가지고 있습니다. AFAIK, 여러 번 추가 통화가 차단되지 않습니다. 고객은 인터 락 스왑을 사용하여 각 스레드 목록을 사용할 수 있습니다. 나는 C#이 이미 내장되어 있는지 궁금해. – Gatis