문제

나는 검사 인텔의"사용하여"사이트 및 해당 트랜잭션 메모리 컴파일러(각 스레드에게 원자 커밋거나 롤백하는 시스템의 메모리처럼,데이터베이스).

와 같은 유망한 방법은 잠금 장치를 교체하십시오 뮤텍스되어 있지 않아 많은 평가를 추가합니다.누군가 여기에 모든 입력?

도움이 되었습니까?

해결책

나는 사용하지 않는 인텔 컴파일러는,그러나,허브 Sutter 했다 몇 가지 흥미로운 의견에 대한 문화 정보를 제공합니다.

서터를 검증합니다.미래의 Concurrency

당신이 볼에 많은 관심과 사용의 트랜잭션의 메모리 또는 개념은 너무 어려운 대부분의 개발자들을 파악?

그것은 아직 가능한 대답하는 사람을 사용하기 때문에 그것되지 않은 가장 아직입니다.인텔은 소프트웨어 트랜잭션의 메모리 컴파일러입니다하지만 질문은"그것은 너무 어려운 개발자를 위한 사용할 수 있나요?"답은 내가 확실히 되지 않기를 바랍니다.요점은 그것의 방법보다 쉽게 잠급니다.그것은 유일한 주요한 것은 연구에 수평선을 보유하는 희망이 크게 감소 우리의 사용을 잠급니다.그것은 결코 완전 잠금 장치를 교체하십시오,하지만 그것이 우리의 유일한 큰 희망을 교체하는 부분적으로 있습니다.

거기에 몇 가지 제한 사항이 있습니다.특히,일부 I/O 은 본질적으로 트랜잭션이 아닙—할 수 있습을 가지고 가는 원자 블록을 사용자에게 자신의 이름을 읽고 이름에서 콘솔하고 자동으로 중단과 재시도록 차단과 충돌하는 경우 다른 트랜잭션사용자는 차이를 구별할 수 있는 경우 프롬프트가 있습니다.트랜잭션 메모리에 대 한 좋은 물건만 감동적 메모리,하지만.

모든 주요 하드웨어 및 소프트웨어 공급업체가 알고 있는 여러 트랜잭션 메모리 도구에 R&D.가 있회의와 학술 논문에는 이론적 기본적인 질문에 대한 답변.우리는하지 않는 모델에서 T 대 아직 우리가 그것을 발송할 수 있습니다.당신은 아마 보기,프로토타입 제한할 수 있는 없는 무제한 트랜잭션 메모리할 수 있는만 읽고,쓰기,말 100 메모리 위치.는 여전히 매우 유용 활성화에 대한 더 많은 잠금 알고리즘,하지만.

다른 팁

박사Dobb 했다는 문서 개념에서 지난해:트랜잭션 프로그램에 의해 부-아이패드 http://www.ddj.com/cpp/202802978

그것은 몇 가지 예입니다,비교하고 결론을 사용하여 그의 예를 들어 라이브러리입니다.

나는 내장 조합니다 라이브러리에서 최고의 일부를 프로그래밍 아이디어.그것을 필요로하지 않는 모든 컴파일러 지원(를 제외하고 그것을 사용하여 C++17),지 않을 구문입니다.일반적으로,그것을 채택의 인터페이스 STM 라이브러리 에서이터베이스를 저장합니다.

그래서 내 라이브러리는 여러 가지 좋은 속성:

  • Monadically 조합.모든 트랜잭션으로 계산이 안에 사용자 정의 사명 STML.결합할 수 있습니다 monadic 트랜잭션으로 더 큰 monadic 트랜잭션이 있습니다.
  • 트랜잭션에서 분리되어 있는 데이터 모델입니다.당신을 구축하고 동시 데이터 모델과 트랜잭션의 변수(TVars 고)실행을 통해 거래습니다.
  • retry 연결됩니다.그것은 다시 실행할 수 있습니다.매우를 구축하는 데 유용 짧고 이해할 수 있는 트랜잭션이 있습니다.
  • 다른 monadic 콤비네이터 표현하는 계산합니다.
  • Context.모든 계산을 실행해야에서 어떤 상황에 맞지 않는,글로벌 런타임입니다.그래서 당신은 많은 서로 다른 상황이 필요할 경우 여러 독립적인 STM 클러스터입니다.
  • 의 구현은 아주 간단한 개념.에서 이상, 참조 구현 용,그래서 그러나 나를 재발견하는 여러 가지 접근법을 위한 C++구현의 부족으로 인해 좋은 지원 기능적 프로그래밍입니다.

라이브러리에 보여줍니다 아주 좋은 안정성과 견고성,심지어 우리는 것을 고려한다면 그것은 실험적인 기능이다.또한,나 접근 열에게 많은 가능성을 개선하는 라이브러리에 의해 성능,기능,포괄성,등등.

을 입증하기 위한 작업,나는 해결 Dining Philosophers 작업입니다.당신은 코드를 찾을 수 있습니다 아래의 링크에서.샘플 트랜잭션:

STML<bool> takeFork(const TVar<Fork>& tFork)
{
    STML<bool> alreadyTaken = withTVar(tFork, isForkTaken);
    STML<Unit> takenByUs    = modifyTVar(tFork, setForkTaken);
    STML<bool> success      = sequence(takenByUs, pure(true));
    STML<bool> fail         = pure(false);
    STML<bool> result       = ifThenElse(alreadyTaken, fail, success);
    return result;
};

업데이트 내가 쓴 튜토리얼에서,당신은 그것을 찾을 수 있습니다 .

Sun Microsystems 발표했는 그들을 발표는 새로운 프로세서를 내년,그 바위는 하드웨어를 지원하는 트랜잭션 메모리입니다.그것은 몇 가지 제한을 갖습니다,그러나 그것은 좋은 첫 번째 단계는 쉽게 해야 프로그래머 대체 잠금/뮤텍스와 트랜잭션 좋은 성능을 기대할 수니다.

에 대한 흥미로운 주제에 관해 말씀에 의해 주어진 Mark 모이어 가든,하나의 연구자들은 태양에서 작업에 트랜잭션 메모리와 록,체크 아웃 링크.

자세한 정보 및 공지 사항 일에 대한 바위와 트랜잭션 메모리에서 일반적인 이 링크.

필수 wikipedia 항목 :)

마지막으로, 이 링크, 에서,University of Wisconsin-Madison,을 포함 참고문헌의 대부분의 연구과 수행에 대한 트랜잭션 기억 여부,하드웨어 관련 소프트웨어 또는 관련이 있습니다.

어떤 경우에는 내가 이것을 볼 수 있습으로 유용하고도 필요합니다.

그러나,경우 프로세서에는 특별한 지침을 만드는 이 과정을 쉽게가는 여전히 큰 오버헤드에 비해 또는 mutex 세마포어.는 방법에 따라 구현할 수 있도 영향을 실시간 성능(이 있거나 정지 인터럽트 또는에서 그들을 방지 쓰기로 공유된 지역).

나의 기대하는 경우 이 구현에만 필요한 부분의 메모리 공간,하지만,그래서 영향을 제한 될 수 있습니다.

-Adam

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