반디앤루니스 인터넷서점

네비게이션 실시간 인기 책

    모던 C++로 배우는 동시성 프로그래밍

    원제 : Concurrency with Modern C++

    • 라이너 그림 저
    • 배장열 역
    • 제이펍
    • 2018년 08월 06일
    • 정가
      25,000원
    • 판매가
      25,000 [0% 할인]
    • 결제 혜택
      무이자
    • 적립금
      750원 적립 [3%P]

      NAVER Pay 결제 시 네이버페이 포인트 5% 적립 ?

    판매가 종료된 상품입니다.

    위시리스트
    회원리뷰
    - [0]
    ISBN: 9791188621309 316쪽 188 x 245 (㎜)

    지금 이책은

    • 판매지수 : 141

    이 분야의 베스트셀러

    이 책이 속한 분야

    출판사 리뷰

    C++ 프로그래머라면 반드시 알아야 할 동시성의 모든 것!
    C++ 동시성 프로그래밍을 마스터할 수 있는 실용적 안내서!




    이 책은 C++ 동시성의 현재와 미래를 탐험하는 여행 가이드다. 모던 C++의 동시성 이야기를 수많은 예제 코드와 함께 깊이 있게 풀어냈으며, 이를 통해 여러분은 이론과 실제를 균형 있게 습득함으로써 최대의 효과를 거둘 수 있을 것이다. 어려운 주제로 인식되는 동시성을 다루는 만큼 곤란한 문제들과 그 해결 방법도 함께 제시한다.



    - C++11과 C++14은 동시적이고 병렬적인 프로그램을 만들기 위한 기본 빌딩 블록을 갖췄다.

    - C++17에서는 표준 템플릿 라이브러리(STL)의 병렬 알고리즘을 지원한다. 다시 말해, STL 기반 알고리즘은 대부분 순차적으로나 병렬적으로 또는 벡터화 방식으로 실행될 수 있다.

    - C++의 동시성 이야기는 현재 진행형이다. C++20에는 확장 퓨처와 코루틴, 트랜잭션 등이 담길 것으로 예상된다.

    추천글

    이 책은 모던 C++의 동시성 프로그래밍에 익숙해질 수 있는 실용적인 안내서입니다. C++ 메모리 모델부터 시작해 실행 가능한 풍부한 예제 코드로 C++ 멀티스레딩 기술을 습득할 수 있으며, 사례 연구는 가려운 곳을 긁어 주기에 충분합니다. 미래의 동시성 기능을 다루는 부분은 정말 마음에 듭니다.
    _ Bart Vandewoestyne, 에스터라인의 수석 소프트웨어 개발 엔지니어


     


    라이너 그림의 C++ 동시성 책은 기존 C++ 표준뿐만 아니라 향후 C++20 표준에서 변화할 내용까지 그 이론과 실제를 두루두루 다룬 정말 보기 드문 역작입니다. 또한, 쉬운 설명과 풍부한 예제 코드, 모범 사례를 통해 주제마다 세부 내용까지 깊이 있게 설명하고 있습니다. 한마디로 풍부한 내용이 돋보이는 필독서입니다.
    _ Ian Reeve, 델의 수석 스토리지 소프트웨어 엔지니어
    1.


    저자 소개

    라이너 그림

    • 구분 : 저서
    • 국적 : 기타
    • 분류 : 기타
    • 인기지수 : 10

    20년간 소프트웨어 아키텍트, 팀장, 강사로 일했다. 여가 때는 C++, 파이썬, 해스켈을 주제로 글을 쓰며, 콘퍼런스에서 강연도 한다. 현재 그는 현대적인 C++과 파이썬에 관한 세미나를 제공하는 프리랜서로 일하고 있다.
    이 책 이외의 저서로는 『C++11 für Programmierer』, 『C++』(공저), 『C++ -Standardbiliothek』가 있다. 세 권 모두 독일 O’Reilly에서 출판한 ‘kurz & gut(영어의 short & good에 해당)’ 시리즈의 일부이다.
    또한 그는 유명한 두 블로그 http://www.grimm-jaud.de/index.php/blog(독일어)와 http://www.ModernesCpp.com(영어)의 운영자이다.

    역자 소개

    배장열

    • 국적 : 대한민국
    • 분류 : 경제/경영/자기계발 저자 , 과학/공학 저자 , 대학교재 저자 , 기타
    • 인기지수 : 749

    개인 개발자이자 IT 전문 번역자다. 요즘은 좋은 책을 소개하는 데 도움이 되고자 번역에 더 많은 정성을 기울이고 있다. 옮긴 책으로는 《PM 인터뷰의 모든 것》(2015), 《리눅스와 함께하는 라즈베리파이》(2014), 《아빠와 함께 배우는 스크래치 프로그래밍 어드벤처》(2014), 《파이썬으로 배우는 라즈베리 파이 프로그래밍》(2013년), 《라즈베리 파이 시작하기》(2013년), 《아론 힐리가스의 오브젝티브-C 프로그래밍》(2012년), 《프로 안드로이드 미디어》(2011년) 등이 있다.

    책 속에서

    1. 책속으로
    C++의 동시성이 생소한 독자는 큰 그림을 그리기 위해 서론부터 읽어야 할 것이다. 큰 그림을 그렸다면 본론으로 나아갈 준비는 끝난 셈이다. 이 책을 처음 읽을 때는 궁금한 나머지 직접 살펴봐야겠다고 생각하지 않은 이상 메모리 모델을 건너뛰는 것이 좋다. 사례 연구는 메모리 모델을 기본적으로 이해하고 있어야 생각할 수 있을 만큼 어려운 이론을 실제로 적용하는 데 도움이 될 것이다.
    _xv쪽

    지금부터는 기본 빌딩 블록이었던 std::atomic_flag에서 고급 원자계로 한 걸음 더 들어가 보자. 살펴볼 대상은 std::atomic이라는 클래스 템플릿이다. 불(bool)이나 정수 관련 타입, 포인터를 위한 부분 및 전체 특수화는 std::atomic_flag보다 더욱더 강력한 인터페이스를 제공한다. 반면, 단점은 이 특수화가 잠김 없음(lock-free)을 보장하지 않는다는 것이다.
    _27쪽

    변형 가능한(mutable) 공유 데이터는 데이터 경쟁(data race)에 취약하므로 동기화만 생각하는 것이 상황을 깔끔하게 정리하는 지름길이다. 비동기 읽기나 쓰기를 데이터에 동시에 수행하면 프로그램은 정의되지 않은 동작을 보인다.
    _83쪽

    성능 수치 자체에 너무 매달리지 않는 것이 좋다. 리눅스와 윈도우에서 알고리즘을 달리한 결과 수치는 그렇게 큰 의미가 없다. 그보다는 어느 알고리즘이 동작하고 어느 알고리즘이 동작하지 않는지 추측할 수 있는 일종의 촉을 가지는 것이 중요하다. 여기서는 리눅스 데스크톱의 성능 수치를 절대적인 기준으로 윈도우 랩톱과 비교하는 일은 없을 것이다. 다만, 어떤 알고리즘이 리눅스나 윈도우에서 더 나은 성능을 보이는지 판단하는 척도로서만 생각할 것이다.
    _136쪽

    작은 프로그램으로 시작해 조금씩 개선해 나간 것이 대단히 바람직했다. 먼저, 각 단계마다 스레드의 교차 실행을 늘릴 수 있다. 그렇게 하면 x와 y의 값도 더 많아질 것이다. 그다음으로, 프로그램의 난도가 높아진다. 작은 프로그램이지만 CppMem은 매우 중요한 서비스를 제공한다.
    _194쪽

    목차

    PART I 서론 _ 1
    CHAPTER 1 모던 C++의 동시성 3

    C++11과 C++14: 토대 4
    메모리 모델 4
    멀티스레딩 5
    사례 연구 7
    벡터의 합 계산하기 7
    싱글턴의 스레드 안전한 초기화 7
    CppMem의 연속 최적화 7
    C++17: 표준 템플릿 라이브러리의 병렬 알고리즘 8
    실행 정책 8
    새 알고리즘들 8
    C++20: 동시성 퓨처 9
    원자계 스마트 포인터 9
    확장 퓨처 10
    래치와 장벽 10
    코루틴 10
    트랜잭션 메모리 10
    태스크 블록 11
    도전 11
    베스트 프랙티스 11
    time 라이브러리 12
    용어 12

    PART II 본론 _ 13
    CHAPTER 2 메모리 모델 15

    계약 16
    기반 17
    도전 18
    원자계 19
    꼼꼼한 메모리 모델 vs 허술한 메모리 모델 19
    원자계 플래그 22
    클래스 템플릿 std::atomic 27
    사용자 정의 원자계 34
    원자계 연산들 35
    원자계 자유 함수들 36
    동기화 및 순서상 제약 조건 39
    C++의 여섯 가지 메모리 모델 39
    시퀀스 일관성 41
    acquire-release 시맨틱 44
    std::memory_order_consume 53
    편안한 시맨틱 57
    담장 60
    메모리 장벽으로서의 담장 60
    세 가지 담장 60
    acquire 담장과 release 담장 63
    원자계 변수의 동기화와 담장의 동기화 65

    CHAPTER 3 멀티스레딩 71
    스레드 72
    생성 72
    라이프사이클 73
    인수 76
    메서드 80
    공유 데이터 83
    뮤텍스 85
    잠김 90
    스레드 안전한 초기화 100
    스레드 로컬 데이터 106
    조건 변수 108
    wait 작업 흐름 110
    사라진 깨우기와 가짜 깨우기 112
    태스크 112
    스레드와 태스크 113
    std::async 115
    std::packaged_task 120
    std::promise와 std::future 124

    CHAPTER 4 사례 연구 135
    벡터의 합 계산하기 136
    벡터의 싱글스레딩 덧셈 137
    공유 변수의 멀티스레딩 합 143
    스레드 로컬 합 148
    벡터의 합: 결론 157
    싱글턴의 스레드 안전한 초기화 158
    잠김 패턴의 이중 확인 159
    성능 측정 160
    스레드 안전한 마이어스 싱글턴 163
    std::once_flag와 결합된 std::call_once 166
    원자계 167
    스레드 안전한 싱글턴 구현의 성능 수치들 170
    CppMem 연속 최적화 171
    CppMem 개요 172
    CppMem: 비원자계 변수 176
    CppMem: 잠김 180
    CppMem: 시퀀스 일관성 원자계 182
    CppMem: acquire-release 시맨틱 원자계 187
    CppMem: 비원자계가 적용된 원자계 190
    CppMem: 편안한 시맨틱 원자계 192
    결론 194

    CHAPTER 5 표준 템플릿 라이브러리의 병렬 알고리즘 195
    실행 정책 196
    알고리즘 198
    새 알고리즘들 199
    함수형 유산 203

    CHAPTER 6 미래: C++20 205
    원자계 스마트 포인터 206
    스레드 안전한 단일 연결 리스트 207
    확장 퓨처 208
    std::future 208
    std::async, std::packaged_task, std::promise 210
    새 퓨처 생성하기 210
    래치와 장벽 213
    std::latch 214
    std::barrier 214
    std::flex_barrier 216
    코루틴 217
    제너레이터 함수 218
    세부 내용 221
    트랜잭션 메모리 223
    ACI(D) 224
    동기화 블록과 원자계 블록 224
    transaction_safe 코드와 transaction_unsafe 코드 228
    태스크 블록 229
    fork와 join 229
    define_task_block과 define_task_block_restore_thread 231
    인터페이스 231
    스케줄러 232

    PART III 심화 _ 233
    CHAPTER 7 도전 235

    ABA 236
    비유 236
    비임계 ABA 237
    잠김 없는 데이터 구조 237
    ABA 문제 238
    해결책 239
    블로킹 문제 241
    프로그램 불변식 깨기 243
    데이터 경쟁 244
    가짜 공유 246
    변수의 라이프사이클 문제 246
    움직이는 스레드 247
    교착상태 249
    경쟁 상태 250

    CHAPTER 8 베스트 프랙티스 251
    개괄 252
    코드 리뷰 252
    변형 가능한 데이터의 데이터 공유를 최소화하라 252
    대기를 최소화하라 253
    변형 불가능한 데이터를 먼저 사용하라 253
    올바른 추상화를 찾아라 253
    정적 코드 분석 도구를 사용하라 254
    동적 강화 도구를 사용하라 254
    메모리 모델 255
    동기화에 volatile을 사용하지 마라 255
    잠김 없는 프로그램을 만들지 마라 256
    잠김 없는 프로그램이 불가피할 때는 잘 정립된 패턴을 사용하라 256
    자신만의 추상화를 만들지 말고 언어가 제공하는 보장을 사용하라 256
    멀티스레딩 257
    스레드 257
    데이터 공유 259
    조건 변수 262
    프로미스와 퓨처 265

    CHAPTER 9 time 라이브러리 267
    시점과 기간, 클록의 상호작용 268
    시점 269
    시점에서 캘린더 시간까지 269
    유효한 시간 범위를 넘어 271
    기간 272
    계산 274
    클록 276
    정확도와 고정성 277
    에포크 279
    잠자기와 기다리기 281
    관습 281
    다양한 기다리기 전략 282

    CHAPTER 10 용어 287

    찾아보기 295

    배송 시 유의사항

    - 반디앤루니스에서 구매하신 도서는 물류 대행 위탁업체 웅진 북센을 통해 배송됩니다.
     (배송 포장에 "웅진 북센"으로 표기될 수 있습니다.)

    - 구매한 상품의 품질과 배송 관련 문의는 반디앤루니스로 문의 바랍니다.

    - 천재지변 및 택배사의 사정에 따라 배송이 지연될 수 있습니다.

    - 결제(입금) 완료 후 출판사 및 유통사의 사정으로 품절 또는 절판 되어 상품 구입이 어려울 수 있습니다. (별도 안내 예정)

    - 도서산간지역의 경우 추가 배송비가 발생될 수 있습니다.

    반품/교환

    상품 설명에 반품/ 교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다)

    반품/교환

    반품/교환
    반품/교환 방법 홈 > 고객센터 > 자주찾는질문 “반품/교환/환불” 안내 참고 또는 1:1상담게시판
    반품/교환 가능 기간 반품,교환은 배송완료 후 7일 이내, 상품의 결함 및 계약내용과 다를 경우 문제발견 후 30일 이내에 신청가능
    반품/교환 비용 변심 혹은 구매착오의 경우에만 반송료 고객 부담(별도 지정 택배사 없음)
    반품/교환 불가 사유
    • 소비자의 책임 사유로 상품 등이 손실 또는 훼손된 경우
    • 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    • 복제가 가능한 상품 등의 포장을 훼손한 경우 : 예)만화책, 잡지, 화보집 등
    • 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
    • 전자상거래등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우
    • 해외주문 상품(해외 원서)의 경우(파본/훼손/오발송 상품을 제외)
    소비자 피해보상
    환불지연에 따른 배상
    • 상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은
      소비자 분쟁해결 기준(공정거래위원회고시)에 준하여 처리됨
    • 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의
      소비자 보호에 관한 법률에 따라 처리함
    반품/교환 주소 경기도 파주시 문발로 77, 웅진북센(반디앤루니스)
    • 회사명 : (주)서울문고
    • 대표이사 : 김홍구
    • 개인정보 보호책임자 : 강동식
    • E-mail : bandi_cs@bnl.co.kr
    • 소재지 : (06168) 서울 강남구 삼성로 96길 6
    • 사업자 등록번호 : 120-81-02543
    • 통신판매업 신고번호 : 제2023-서울강남-03728호
    • 물류센터 : (10881) 경기도 파주시 문발로 77 반디앤루니스
    copyright (c) 2016 BANDI&LUNI'S All Rights Reserved