C 및 C++에는 스레드를 생성하는 플랫폼 간 플랫폼이 있습니까? sched_yield() 또는 수면 (0)과 비슷한가요? SDL_Delay (0)는 항상 일부 구현에서 즉시 생성되거나 즉시 반환됩니까?C/C++에서 스레드를 생성하는 플랫폼 간 방법은 무엇입니까?
답변
C 또는 C++ (C++ 98까지)에 "스레드"가 없으므로 스레드가 생성 할 수있는 플랫폼 간 플랫폼이 전혀 없습니다.
C++ 0x에는 yield로 호출 할 수있는 std::this_thread::yield()
함수가 있습니다. 일단 사람들이 C++ 0x 쓰레드 라이브러리를 사용하기 시작하면 쓰레드가 양보 할 수있는 이식성있는 방법이 될 것입니다.
나는 이것이 언어에 내장되어 있지 않다는 것을 알고 있습니다. 나는 주로 SDL_Delay에 대한 주석을 사용하는 라이브러리가 있는지 궁금해하고 있습니다. – Shum
@Shum : 사용중인 모든 스레딩 라이브러리에 가능성이 있습니다. 어떤 스레딩 라이브러리 *를 사용하고 있습니까? –
@Shum : "라이브러리"라고 말하면 유일한 대답은 "어쩌면 라이브러리가 지원하는 플랫폼과 라이브러리가 제공하는 기능에 달려 있습니다." –
(C++ 케이스의 경우 boost::thread::yield()
) posix 스레드가있는 플랫폼에서 pthread_yield()
은 C 및 그와 연결된 모든 기능에 대해 동일한 기능을 수행합니다. 스케줄러가 그 기능을 지원하지 않기 때문에 이것이 즉시 스레드를 중지시키지 않고 다른 스레드를 시작하지 않는 플랫폼에서는 그렇습니다. 나는 그러한 많은 플랫폼이 실제로 야생에 존재하지 않는다고 생각한다.
Yielding은 다른 스레드를 시작할 필요가 없습니다. 스케줄러는 즉시 생성 된 스레드를 다시 시작할 수 있습니다. –
@James : 합의 된 모호한 표현이지만 타임 슬라이싱 스케줄러의 관점에서 보았을 때, 그 라인은 새로운 스레드가 스케쥴링 될 가능성을 갖기 전에 기존의 슬라이스를 기다리는 것을 반영합니다. 그 자리를 차지하십시오. –
Windows (물론 POSIX 스레드는 없음)에서 본질적으로 시간 제한이 0 인 "Sleep"이 호출됩니다. posix 스레딩에서 –
- 1. n 개의 스레드를 생성하는 방법은 무엇입니까?
- 2. Boost에 플랫폼 간 임원이 있습니까?
- 3. 플랫폼 간 Urllib 문제
- 4. 모바일 플랫폼 간 이식성
- 5. 스레드를 생성하는 Java API
- 6. C++에서 암호 키를 숨기는 플랫폼 간 방법은 무엇입니까?
- 7. ExecutorService가 작업에 대한 새 스레드를 생성하는 단위 테스트 방법은 무엇입니까?
- 8. 가벼운 플랫폼 간 입력 라이브러리
- 9. 플랫폼 간 바이너리 종속성 처리
- 10. 플랫폼 간 위젯 라이브러리의 Marketshare?
- 11. Qt Creator로 플랫폼 간 빌드 수행
- 12. 스레드를 동기화하는 방법은 무엇입니까?
- 13. 스레드를 생성하는 메서드를 단위 테스트하는 방법?
- 14. 플랫폼 기본 문자 인코딩이 플랫폼 간 성능에 미치는 영향
- 15. 가장 다양한 플랫폼 간 친화적 인 코딩 언어는 무엇입니까?
- 16. Java의 RSA 암호화 : 플랫폼 간 문제가 있습니까?
- 17. 이진 파일 및 플랫폼 간 호환
- 18. 플랫폼 간 소프트웨어 업데이트 라이브러리/도구가 좋습니까?
- 19. mindmapping과 같은 플랫폼 간 레이아웃을위한 엔진
- 20. C++의 플랫폼 간 투명 창이 있습니까?
- 21. vimrc가 플랫폼 간 및 Dropbox와 동기화됩니다.
- 22. Java로지도를 생성하는 방법은 무엇입니까?
- 23. PDF를 생성하는 방법은 무엇입니까?
- 24. C에서 경로를 연결하는 좋은 플랫폼 간 플랫폼이란 무엇입니까?
- 25. 현재 디렉토리를 가져 오는 플랫폼 간 플랫폼이란 무엇입니까?
- 26. MonoTouch에서 스레드를 정리하는 방법은 무엇입니까?
- 27. 자바에서 스레드를 종료하는 방법은 무엇입니까?
- 28. 스레드를 중지/시작하는 방법은 무엇입니까?
- 29. 매달린 스레드를 찾는 방법은 무엇입니까?
- 30. 포럼 스레드를 프로그래밍하는 방법은 무엇입니까?
yield()는 종종 나쁜 디자인입니다. 당신이 무언가를 기다릴 필요가 있다면, 이벤트, 신호 또는 어떤 종류의 조건을 통해 명시 적으로 기다립니다. –
항상 "yield"버전을 작성하는 것은 불가능합니다. *에 *를 양보 할 다른 스레드가 없다면? 나는 SDL의 SDL_Delay (0)가 당신이 원하는 것과 정확히 일치한다고 말할 것이다. –