Additional sample videos, individual lessons and other formats are available here.
Register your product to gain access to bonus material or receive a coupon.
4+ Hours of Video Instruction
Introduction to C++ Concurrency LiveLessons introduces the principles of concurrency by creating and running simple programs. It not only shows how to write correct code, but also discusses the dangers and pitfalls of concurrency such as data races, deadlocks, livelocks, and more.
C++ is undergoing rapid changes to support concurrent and parallel programming. The 2011 Standard introduced a new multicore memory model, atomic variables, threads, asynchronous tasks, and synchronization primitives. Work is being done to add even more support in the future. It’s no longer enough to just learn some new syntax and library API. There’s a need to gain a deeper understanding of the theory and mechanics of concurrency, and Bartosz leads you to that understanding in this video training.
About the Instructor
Bartosz Milewski is the president of Reliable Software, a company that creates high-quality productivity tools for programmers. His work has been widely published in major journals over the past several years, and he is the author of C++ In Action (Addison-Wesley, 2001). During his eight years at Microsoft, he was the development lead of the Content Index component of Windows 2000. He has taught C++ programming at the University of Wroclaw in Poland and holds a Ph.D. in theoretical physics from the University of Wroclaw. He is also involved with the University of Washington, where he participates in graduate courses and seminars in computer science. He is a member of the advisory board at UW Professional and Continuing Education, advising on C/C++ courses.
What You Will Learn
Who Should Take This Course
Lesson 1, "Running an Interactive Demo," shows you the difference that concurrency can make in the behavior of an interactive application. You learn about latency and throughput and the difference between concurrency and parallelism.
Lesson 2, "Starting and Joining Threads," teaches you how to start a thread and what fork/join parallelism is. It also shows you how to pass arguments to threads and talks about thread construction and destruction.
Lesson 3, "Using Threads to Return Values," teaches you how to return data from threads using promises and futures. It shows you how to use async to start threads and tasks and also discusses task-based parallelism.
Lesson 4, "Passing Data Between Threads," teaches you more about passing data between threads. You learn what a data race is and how to avoid it. The lesson describes different ways of passing data that don't introduce data races. This knowledge is then used to implement a program that lists directories in parallel.
Lesson 5, "Working with Mutexes and Locks," demonstrates how to use a mutex and a critical section to protect shared data from races. You learn the basics of the ownership system, which is a systematic way of preventing data races in concurrent programs. You also learn about the limitations of mutexes and locks and their lack of scalability and composability. You see how easy it is to create deadlocks and how to protect your program from them.
Lesson 6, "Using Condition Variables to Communicate," teaches you about the ways threads can communicate with each other. You see a polling example and the use of condition variables. The lesson discusses the client/server architecture, message passing, and the actor model. It also implements a message passing queue and talks about producers and consumers.
Lesson 7, "Understanding the Dangers of Atomic Variables," teaches you about the C++ memory model. It explains what sequential consistency is and how it can be broken. You learn about atomic variables and the dangers of lock-free programming. You also see an example of atomicity violation.
Lesson 8, "Looking into the Future of C++ Concurrency," teaches you about the future of C++ concurrency. It discusses the new ways of composing futures, asynchronous operations, and resumable functions. You also get a taste of programming using software transactional memory.
About LiveLessons Video Training
LiveLessons Video Training series publishes hundreds of hands-on, expert-led video tutorials covering a wide selection of technology topics designed to teach you the skills you need to succeed. This professional and personal technology video series features world-leading author instructors published by your trusted technology brands: Addison-Wesley, Cisco Press, IBM Press, Pearson IT Certification, Prentice Hall, Sams, and Que. Topics include IT Certification, Programming, Web Development, Mobile Development, Home and Office Technologies, Business and Management, and more. View all LiveLessons on InformIT at http://www.informit.com/livelessons.
Introduction to C++ Concurrency
Lesson 1: Running an Interactive Demo
1.1 Identify unresponsive application
1.2 Observe reduced latency
1.3 Observe parallel performance
Lesson 2: Starting and Joining Threads
2.1 Run a thread
2.2 Fork multiple threads
2.3 Start a thread with arguments
Lesson 3: Using Threads to Return Values
3.1 Create a promise and a future
3.2 Use std::async to start a thread
3.3 Learn about tasks
Lesson 4: Passing Data Between Threads
4.1 Learn about data races
4.2 Pass data by value and by move
4.3 Pass immutable data between threads
4.4 List directories in parallel
Lesson 5: Working with Mutexes and Locks
5.1 Use mutex to protect shared data
5.2 Learn about ownership systems
5.3 Implement a bank account object with a lock
5.4 Implement transfer between bank accounts
5.5 Discover and fix a deadlock
Lesson 6: Using Condition Variables to Communicate
6.1 Create a polling loop
6.2 Use a condition variable
6.3 Create a concurrent consumer
6.4 Implement message passing queue
Lesson 7: Understanding the Dangers of Atomic Variables
7.1 Learn about sequential consistency
7.2 Get acquainted with atomic variables
7.3 Use atomic variables and learn about atomicity violations
Lesson 8: Looking into the Future of C++ Concurrency
8.1 Compose futures using when_all and when_any
8.2 Compose futures using "then" and resumable functions
8.3 Learn about transactional memory