O'Reilly logo

21st Century C, 2nd Edition by Ben Klemens

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 12. Parallel Threads

It’s 99 revolutions tonight.

Green Day, “99 Revolutions”

Just about all the computers sold in the last few years—even many telephones—are multicore. If you are reading this on a keyboard-and-monitor computer, you may be able to find out how many cores your computer has via:

  • Linux: grep cores /proc/cpuinfo

  • Mac: sysctl hw.logicalcpu

  • Cygwin: env | grep NUMBER_OF_PROCESSORS

A single-threaded program doesn’t make full use of the resources the hardware manufacturers gave us. Fortunately, it doesn’t take much to turn a program into one with concurrent parallel threads—in fact, it often only takes one extra line of code. In this chapter, I will cover:

  • A quick overview of the several standards and specifications that exist for writing concurrent C code

  • The one line of OpenMP code that will make your for loops multithreaded

  • Notes on the compiler flags you’ll need to compile with OpenMP or pthreads

  • Some considerations of when it’s safe to use that one magic line

  • Implementing map-reduce, which requires extending that one line by another clause

  • The syntax for running a handful of distinct tasks in parallel, like the UI and backend of a GUI-based program

  • C’s _Thread_local keyword, which makes thread-private copies of global static variables

  • Critical regions and mutexes

  • Atomic variables in OpenMP

  • A quick note on sequential consistency and why you want it

  • POSIX threads, and how they differ from OpenMP

  • Atomic scalar variables via C ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required