1

현재 여러 스레드에서 스케줄러 간의로드 밸런싱을위한 작업 도용을 사용하여 C++ 용 동시성 라이브러리에서 녹색 스레드로 작업하고 있습니다.메인 쓰레드 컨텍스트가 다른 하드웨어 쓰레드로 반환되는 경우, 정의되지 않은 동작이 발생합니까?

메인 컨텍스트를 하드웨어 스레드에 고정했습니다. 즉, 도난 당하거나 다른 하드웨어 스레드로 마이그레이션 할 수 없음을 의미합니다.

나는이 컨텍스트가 어디에서 왔는지 다른 하드웨어 스레드에서 도난 당하고 반환되는 (종료) 메인 컨텍스트가 정의되지 않은 동작 인 경우이를 읽은 것으로 믿습니다. 그러나 나는 이것에 대한 정보를 찾을 수없는 것 같습니다.

정의되지 않은 동작입니까? 소스를 인용하면 완벽 할 것입니다.

답변

1

우선, 표준 C++에는 녹색 스레드가 없습니다. 따라서 스택을 만들고 교체하는 것은 정의되지 않은 동작입니다. UB는 어떤 것이 효과가 없다는 것을 의미하지는 않습니다. 표준 준수 시스템에서 작동한다는 보장이 없음을 의미합니다.

녹색 스레드/동시 루틴은 UB 경계에서 균형을 유지하므로 지원되는 모든 플랫폼에 대해 구현됩니다. 그들은 특정 플랫폼 용으로 작성되었으며 이러한 플랫폼에서 다른 함정을 극복 할 수있는 단점이 있기 때문에 작동합니다.