2014-04-23 2 views
-1

그래서 USB HID 장치를위한 새로운 소프트웨어 인터페이스를 설계하고 있으며 동시성 보호에 대한 질문이 있습니다. 필자는 디자인에서 다른 스레드에서 호출 될 수 있으므로 ReadFile 및 WriteFile (잘못된 경우 수정하십시오) 호출에 동시성 보호를 추가해야한다고 가정합니다.동시성을 위해 정적 부울 대 임계 섹션 사용

이전에는 스레드 안전성을 구현하기 위해 정적 부울을 사용하는 경우가있었습니다. 부울이 코드를 입력하기에 안전 할 때까지 1ms 대기 루프를 추가했습니다. CriticalSections도 사용했습니다. CriticalSections가 정적 bool을 사용하는 것보다 근본적으로 더 나은지 아무에게 말해 줄 수 있습니까? 대기 루프를 코딩해야 할 필요는 없다는 것을 알지만, VC의 폴링 속도는 잠금 상태를 확인하는 데 어떤 역할을합니까? OS를 개선하는 어떤 방법으로 OS에 푹 빠져 있습니까? 동시성 검사에 bool을 사용하는 것이 항상 안전하지는 않습니까?

+0

표준 라이브러리에 스레드 지원을 추가하면 std :: mutex와 같은 것을 사용해야합니다. – Rastaban

+0

Nah, 뮤텍스가 너무 비쌉니다. CriticalSections가해야합니다. 나는 표준 라이브러리에서 그들을 찾을 것이다. – Ian

+0

std :: mutex는 반드시 윈도우 뮤텍스가 아니지만 CS로 구현 될 수 있습니다. – Ian

답변

1

저는 C++에 대해 많이 알지 못합니다. 그러나 동시성은 대개 이 아니며 폴링으로 구현 된이 아니므로 일반적으로 폴링이 프로세서 시간을 낭비하고 에너지를 낭비하지 않아야합니다. 두 가지 주요 저수준 접근 방식은 다음과 같습니다.

  1. 아마도 제한 시간으로 잠금을 설정하십시오.

  2. 잠금없는 프리미티브를 사용하면 대개 비교 및 ​​설정 또는 비교 및 ​​교체가 가능합니다.

이러한 접근 방식은 모두 일반적인 현대식 하드웨어에서 지원됩니다. 그들은 상호 작용의 매우 다른 "풍미"로 인도합니다. 자물쇠가없는 데이터 구조를 작성하는 것은 전문가에게 맡기는 것이 가장 좋습니다 (복잡한 경향이 있으며 더 중요한 것은 그것이 올바른지 여부와 논쟁이 진행되는 동안 진보가 보장되는지 여부를 파악하기가 어려워집니다. 증거 페이지가 동반 됨). 다행히도 라이브러리를 얻을 수는 있지만, 모든 경우가 아니라 모든 라이브러리를 차단하는 것보다 더 빠르고 더 잘 작동합니다.

+0

잠금 장치가없는 구조 나 프리미티브는 무엇인지 모르지만 데이터 구조는 보호하지 않습니다. 단지 USB 입/출력뿐입니다. – Ian

0

괜찮습니다. 나는 단지 중요한 부분을 고수 할 것입니다. 비판적인 섹션이 작동하는 방식에 대한 흥미로운 정보를 얻고 싶습니다. IE - 왜 그들은 자신의 폴링 루프를 작성하는 것과는 다른 것일까 요? 이 토론에서 보았습니다 : std::mutex performance compared to win32 CRITICAL_SECTION std :: mutex의 작동 방식에 대해 혼란이 있지만 CRITICAL_SECTIONS를 사용하는 것이 Windows에서 가장 빠른 동시성 보호를 얻는 가장 확실한 방법 인 것으로 보입니다.

감사합니다.