O/S Thread.Sleep (10)을하지 않고도 협업/비 선점 멀티 태스킹으로 양보 또는 교착 상태를 방지하는 창의적인 아이디어가 있습니까? 일반적으로 yield 또는 sleep 호출은 스케줄러로 다시 호출하여 다른 작업을 실행합니다. 그러나 이것은 언젠가 교착 상태를 일으킬 수 있습니다.교착 상태를 방지하는 협동/비 선점 스레드?
일부 배경 :
이 응용 프로그램은 같은 업계의 다른 시스템에 비해 지금까지, 그것은 매우 빨리 속도와, 엄청난 필요가있다. 속도 기술 중 하나는 O/S 스레드의 컨텍스트 전환 비용 대신 협동/비 선점 스레드입니다.
우선 순위 및 처리 시간에 따라 작업을 호출하는 우선 순위 관리자를 상위 수준으로 설계합니다. 각 작업은 작업의 "반복"을 수행하고 우선 순위 대기열에서 차례를 다시 기다립니다.
비 선점 스레딩의 까다로운 문제는 특정 작업을 작업 도중에 중지하고 계속하기 전에 다른 작업의 다른 이벤트를 기다리고 싶을 때해야 할 일입니다.
이 경우 우리는 A와 B의 작업을 동기화해야하는 A와 B의 3 가지 작업을 수행합니다. 먼저 A가 B와 C를 시작합니다. 그러면 B가 생성되어 C가 호출됩니다. C가 yield 될 때, A는 둘 다 비활성 상태라고보고, B가 실행될 시간이지만 C의 시간은 아직 결정하지 않습니다. 이제는 B가 C를 호출하는 수익률에 머물러 있기 때문에 결코 실행할 수 없습니다.
흥미로운 질문입니다. 귀하의 대답이 귀하가 사용하고있는 언어임을 나타내는 것으로 보이기 때문에이 C#으로 표시하십시오. –