문제

목적

나는 이식성이 가장 큰 관심사 인 작은 라이브러리를 쓰고 있습니다. 그것은 대부분 호환 C90 (ISO/IEC 9899 : 1990) 환경 만 가정하도록 설계되었습니다. 라이브러리가 제공하는 기능 세트는 모두 내부 데이터 구조에서 작동 (읽기/쓰기)을 모두 작동합니다 (읽기/쓰기). 나는 다른 디자인 대안을 고려했지만 도서관이 무엇인지에 대해서는 아무것도없는 것 같습니다. 달성하려고합니다.

의문

스레드 안전성을 보장하는 데 사용할 수있는 휴대용 알고리즘, 기술 또는 인디네이션이 있습니까? 나는 기능을 다시 입력하는 것에 대해 걱정하지 않습니다. 더욱이, 알고리즘/기술/안내가 휴대 할 수있는 경우 속도 나 (아마도) 자원을 낭비하지 않습니다. 이상적으로는 도서관 (예 : GNU PTH) 또는 시스템 별 작업 (원자 테스트 및 세트와 같은)에 의존하고 싶지 않습니다.

나는 수정을 고려했다 Lamport 's Bakery 알고리즘, 그러나 나는 스레드 자체에서 작동하는 대신 스레드가 불리는 기능 내부에서 작동하도록 변경하는 방법을 모르겠습니다.

모든 도움은 대단히 감사합니다.

도움이 되었습니까?

해결책

Lamport의 베이커리 알고리즘은 아마도 효과가있을 것입니다. 불행히도 여전히 실질적인 문제가 있습니다. 특히 많은 CPU가 구현됩니다 분서 외 메모리 작업: 코드를 완벽하게 올바른 명령 시퀀스로 컴파일하더라도 CPU는 코드를 실행할 때 더 나은 성능을 달성하기 위해 즉시 지침을 재정렬하기로 결정할 수 있습니다. 이것을 돌아 다니는 유일한 방법은 사용하는 것입니다. 메모리 장벽, 고도로 시스템 및 CPU 관련이 있습니다.

여기에는 두 가지 선택이 있습니다. (1) 라이브러리 스레드-미지 안전을 유지하고 사용자가 문서에서이를 인식하게하거나 (2) 플랫폼 별 뮤트를 사용하십시오. 다양한 플랫폼의 뮤 테스를 구현하고 통합 된 추상 인터페이스를 제공하는 다른 라이브러리를 사용하여 옵션 2를 더 쉽게 만들 수 있습니다.

다른 팁

OS/하드웨어 지원, 최소한 원자 CAS가 없으면 실용적으로 할 수있는 일은 없습니다. 거기 ~이다 그러나 다양한 플랫폼을 일반적인 인터페이스로 추상화하는 휴대용 라이브러리.

http://www.gnu.org/software/pth/related.html

요즘 거의 모든 시스템 (Windows조차도 Windows조차도 LibpThread를 실행할 수 있습니다.

기능은 스레드 안전 할 수 없거나 보는 방식에 따라 타고난 스레드 안전합니다. 그리고 스레딩/잠금은 선천적으로 플랫폼에 따라 다릅니다. 정말로, 그것은 최대입니다 사용자 스레딩 문제를 처리하기위한 라이브러리의.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top