POSIX Thread Anatomy
Last updated
Was this helpful?
Last updated
Was this helpful?
āļ āļēāļĒāđāļāļĢāļ°āļāļāļāļāļīāļāļąāļāļīāļāļēāļĢāļĨāļĩāļāļļāļāļāđāļāļąāđāļāļāļ°āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāļāļēāļāđāļāļāļŦāļĨāļēāļĒāļāļēāļāļāļĢāđāļāļĄāļāļąāļ (multitasking support) āđāļāļĒāļāļąāļ§āđāļāļĢ-āđāļāļŠāđāļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļāļēāļāļĒāđāļāļĒāđāđāļāđāđāļĢāļĩāļĒāļāļŠāđāļ§āļāļāļĩāđāļ§āđāļē āđāļāļĢāļ (thread) āļŦāļĢāļ·āļāļāļĩāļāļāļ·āđāļāļŦāļāļķāđāļāļ§āđāļē âlightweight processesâ āļāđāļāļāļĩāļāļāļāļāļēāļĢāđāļāđ thread āļāļ·āļāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļģāđāļŦāđāļāļąāļāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļģāļāļēāļĢāļāļąāļāļāļēāļĢāļāļąāļāđāļŦāļāļļāļāļēāļĢāļāđāļāļĩāđāđāļāļīāļāļāļķāđāļāđāļāđāļ§āļĨāļēāļāļĩāđāđāļĄāđāđāļāđāļāļāļ (asynchronous events) āđāļāđāļāļĒāđāļēāļāļāļąāļāļāļĩāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āļāļāļāļāļēāļāļāļąāđāļāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāđāļāļĨāļąāļāļĐāļāļ°āļāļāļēāļ (parallel computing) āļāļāđāļāļĢāļ·āđāļāļāļāļĩāđāļĄāļĩāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļāļŦāļĨāļēāļĒāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨ (multi-core CPU) āļāļĩāđāđāļāđāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāļĢāđāļ§āļĄāļāļąāļāđāļāđāļāļĩ (shared-memory multiprocessor)
āđāļāļĒāļāļąāđāļ§āđāļāđāļĨāđāļ§āđāļāļĢāđāļāļŠāļ āļēāļĒāđāļāļĢāļ°āļāļāļāļāļīāļāļąāļāļīāļāļēāļĢāļĨāļĩāļāļļāļāļāđāļāļ°āļāļĢāļ°āļāļāļāļāđāļ§āļĒāļŠāļāļēāļāļ°āļāļāļāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨ (āđāļāđāļāļāđāļēāļ āļēāļĒāđāļāļāļąāļ§āļĢāļĩāļāļīāļŠāđāļāļāļĢāđ AX,BX,DX
) āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļāļāļāļēāļĢāļāļāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģ (āļŠāļģāļŦāļĢāļąāļāđāļāđāļ code, globals, heap āđāļĨāļ° stack) āđāļĨāļ°āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāļĢāļ°āļāļāļāļāļīāļāļąāļāļīāļāļēāļĢ (āđāļāđāļ āļāļēāļĢāđāļāļīāļāđāļāļĨāđ, āļŦāļĄāļēāļĒāđāļĨāļāđāļāļĢāđāļāļŠ) āļāļķāđāļāđāļāļĢāļāļāđāļāļ°āļāļĨāđāļēāļĒāļāļąāļ āđāļāđāļāļ°āļāđāļēāļāļāļąāļāļāļĢāļāļāļĩāđāđāļāļĢāđāļāļŠāđāļāđāļĨāļ°āļāļąāļ§āļāļ°āđāļĒāļāļāļēāļĢāđāļāđāļāļŠāļāļēāļāļ°āļāļąāļāļāļĒāđāļēāļāļāļąāļāđāļāļ āđāļāļāļāļ°āļāļĩāđāđāļāđāļĨāļ°āđāļāļĢāļāļāļ°āļĄāļĩāļāļēāļĢāđāļāđ code, globals āđāļĨāļ° heap āļĢāđāļ§āļĄāļāļąāļ
āļāļķāđāļāđāļāļĢāļāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļģāļāļēāļāđāļāđāļāļĩāđāļāļāļĢāļāļĩāļāļĩāđāđāļāļĢāļ·āđāļāļāļāļāļĄāļāļīāļ§āđāļāļāļĢāđāļāļąāđāļāļĄāļĩāļĄāļēāļāļāļ§āđāļēāļŦāļāļķāđāļāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨ āđāļāļĒāđāļāļĢāļđāļāļāđāļēāļāļĨāđāļēāļāđāļŠāļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāļāđāļāđāļĨāļ°āļāļąāļ§ (āđāļāđāđāļāđ main(), function1()
āđāļĨāļ° function2()
) āļāļķāđāļāļāđāļēāđāļāļĢāļ·āđāļāļāļĄāļĩāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļĩāļĒāļāļāļąāļ§āđāļāļĩāļĒāļ§āļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāđāļāļ°āļāļģāļāļēāļĄāļĨāļģāļāļąāļāļāļāļāļāļģāļŠāļąāđāļāđāļāđāļĨāļ°āļāļĢāļĢāļāļąāļ (program counter) āļāļķāđāļāļāļēāļāļāļ°āđāļāđāđāļ§āļĨāļēāļāļąāđāļāļŠāļīāđāļ 2 āļāļēāļāļĩ āđāļāđāļāđāļēāđāļāļĢāļ·āđāļāļāļĄāļĩāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļģāļāļ§āļ 3 āļāļąāļ§āļāļąāđāļāļŠāļēāļĄāļŠāđāļ§āļāļāđāļāļ°āđāļĒāļāļāļąāļāļāļģāļāļēāļāđāļāđāļāđāļĨāļ°āļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļķāđāļāļāļēāļāļāļ°āđāļāđāđāļ§āļĨāļēāļāļąāđāļāļŠāļīāđāļāđāļāļĩāļĒāļ 50 āļ§āļīāļāļēāļāļĩāđāļāđāļēāļāļąāđāļ
āļāļąāļ§āđāļāļĢāļāđāļāđāļĨāļ°āļāļąāļ§āļ āļēāļĒāđāļāđāļāļĢāđāļāļŠāļāļ°āđāļāđāļāļĢāļąāļāļĒāļēāļāļēāļĢāđāļāļĩāļĒāļ§āļāļąāļāđāļāļĢāđāļāļŠ āđāļāđāļāļĒāđāļēāļāđāļĢāļāđāļāļēāļĄāļĢāļ°āļāļāļāļāļīāļāļąāļāļīāļāļēāļĢāļāđāļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļĢāļēāļāđāļŦāđāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāđ thread āđāļāđāļāļĒāđāļēāļāļāļīāļŠāļĢāļ° āđāļāļ·āđāļāļāļāļēāļāļāļ§āļāļĄāļąāļāđāļāļĩāļĒāļāđāļāđāļāļąāļāļĨāļāļāđāļāļēāļāļĢāļąāļāļĒāļēāļāļĢāđāļāđāļāļĩāļĒāļāđāļĨāđāļāļāđāļāļĒāđāļāđāļēāļāļąāđāļāđāļāļ·āđāļāđāļĒāļāđāļāđāļāđāļāđāļāļĢāđāļāļĢāļĄāđāļĨāđāļāļāļĩāļāļāļąāļ§āļāļąāļāđāļŠāļāļāđāļāļĢāļđāļāļāđāļēāļāļāļ
āđāļĨāļāļĢāļēāļĢāļĩ POSIX thread āļāļ·āļāļ§āđāļēāđāļāđāļāļāļąāļ§āļĄāļēāļāļĢāļēāļāļēāļāļŦāļĨāļąāļāđāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāļāļŠāļģāļŦāļĢāļąāļāđāļāļĢāđāļāļĢāļĄāļ āļēāļĐāļē C/C++ āļāļķāđāļāđāļāđāļāđāļĨāļāļĢāļēāļĢāļĩāļāļĩāđāļāļąāļāđāļāļĢāļĩāļĒāļĄāļāļąāļāļāđāļāļąāļāļāđāļēāļāđāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļąāļāļāļēāļĢāđāļāļĢāļāđāļĨāļ°āļāļ°āļāļģāļāļēāļāđāļāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļĄāļēāļāļŠāļģāļŦāļĢāļąāļāļĢāļ°āļāļāļāļāļĄāļāļīāļ§āđāļāļāļĢāđāļāļĩāđāļĄāļĩāļŦāļĨāļēāļĒāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļĨāļēāļ (multi-processor āļŦāļĢāļ·āļ multi-core systems) āđāļāļ·āđāļāļāļāļēāļāļĄāļĩāļāļąāļāļāđāļāļąāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢāļēāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļŠāļāļāđāļāđāļĨāļ°āļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļĨāļēāļāļāļĩāđāļāļĒāļđāđāļ āļēāļĒāđāļāļĢāļ°āļāļāļāļāļĄāļāļīāļ§āđāļāļāļĢāđāļāļąāļ§āđāļāļĩāļĒāļ§āļāļąāļāđāļĨāļ°āđāļāļĢāļāļāļļāļāļāļąāļ§āļāļĩāđāļāļĒāļđāđāļ āļēāļĒāđāļāđāļāļĢāđāļāļŠāđāļāļĩāļĒāļ§āļāļąāļāļāļąāđāļāļāđāļāļ°āđāļāđāļāļ·āđāļāļāļĩāđāđāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāđāļāļĩāļĒāļ§āļāļąāļ (address space) āļāļķāđāļāđāļāļāļāđāļēāļāļāļēāļāđāļāļāđāļāđāļĨāļĒāļĩāđāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļāļāļāļāļēāļ (Parallel programming) āđāļāđāļ MPI āđāļĨāļ° PVM āļāļĩāđāļāļđāļāđāļāđāđāļāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄāļāļēāļĢāļāļģāļāļ§āļāđāļāļāļāļĢāļ°āļāļēāļĒ (distributed computing) āđāļāļĒāļąāļāļĢāļ°āļāļāļāļāļĄāļāļīāļ§āđāļāļāļĢāđāđāļāļĢāļ·āđāļāļāļāļ·āđāļāđ āļāļĩāđāļāļĒāļđāđāđāļāļĨāļāļāļāđāļāļŦāļĢāļ·āļāļāđāļēāļāļŠāļāļēāļāļāļĩāđāļāļąāļ
āļāļāļ§āļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāļāļāļąāđāļāļāļ°āļāļĢāļ°āļāļāļāđāļāļāđāļ§āļĒ āļŠāļĢāđāļēāļāđāļāļĢāļ (thread creation), āļŠāļīāđāļāļŠāļļāļāļāļēāļĢāļāļģāļāļēāļ (termination), āļāļģāļāļēāļāļāļēāļĄāļāļąāļāļŦāļ§āļ° (thread synchronization āļāđāļ§āļĒāļ§āļīāļāļĩāļāļēāļĢāđāļāļ joins, blocking āđāļāđāļāļāđāļ), āļāļēāļĢāļāļąāļāļĨāļģāļāļąāļāļāļēāļĢāļāļģāļāļēāļ (scheduling), āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨ (data management) āđāļĨāļ° āļāļēāļĢāļāļīāļāļāđāļāļāļąāļāļĢāļ°āļŦāļ§āđāļēāļāļāļąāļ (process interaction)
āļāļ·āđāļāļāļĩāđāļāļĩāđāđāļāđāļāļēāļāļĢāđāļ§āļĄāļāļąāļāļāļāļāđāļāļĢāļāļāļąāđāļāļŦāļĄāļāļ āļēāļĒāđāļāđāļāļĢāđāļāļŠāļāļĢāļ°āļāļāļāđāļāļāđāļ§āļĒ
āļāļļāļāļāļģāļŠāļąāđāļāđāļāļĢāđāļāļŠ (Process instructions)
āļāđāļē files descriptors āļāļĩāđāļĄāļĩāļāļēāļĢāđāļāļīāļāđāļ§āđ
āļŠāļąāļāļāļēāļ (signals) āđāļĨāļ°āļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢ (signal handlers)
āđāļāđāļĢāļāļāļāļĢāļĩāđāļāļąāļāļāļļāļāļąāļ (current working directory)
āļŦāļĄāļēāļĒāđāļĨāļ User āđāļĨāļ° Group
āđāļāļĒāđāļāđāļĨāļ°āđāļāļĢāļāļāļ°āļĄāļĩ:
āļŦāļĄāļēāļĒāđāļĨāļāđāļāļĢāļ (Thread ID)
āļāļĨāļļāđāļĄāļāļąāļ§āđāļāļĢāļĢāļĩāļāļīāļŠāđāļāļāļĢāđ (set of registers) āđāļĨāļ° stack pointer
āļŠāđāļāđāļāļŠāļģāļŦāļĢāļąāļāđāļāđāļāļāđāļēāļāļąāļ§āđāļāļĢ (local variables)
signal mask
āļāđāļē priority
āļāđāļēāļŠāļāļēāļāļ°āļāļĩāđāļŠāđāļāļāļĨāļąāļ: errno
āđāļĨāļ°āđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢāļāļāļĄāđāļāļĨāđāđāļāļĢāđāļāļĢāļĄāļāļ°āļāđāļāļāļĄāļĩāļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļāļĢāļēāļĢāļĩ Posix threads āļāđāļ§āļĒ -lpthread
āļāļąāļāļāļąāļ§āļāļĒāđāļēāļ
āđāļĄāļ·āđāļāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļĨāļ°āļāļąāļāļāļēāļĢāđāļāļĢāđāļāļŠāđāļĨāđāļ§ āļāļēāļĢāđāļāđ thread āļāļ°āļĄāļĩāļāļēāļĢāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāļāļāļāļĢāļ°āļāļāļāđāļāļĒāļāļ§āđāļēāļĄāļēāļ āđāļĨāļ°āđāļāļīāļ overhead āļāļąāļāļĢāļ°āļāļāļāļāļīāļāļąāļāļīāļāļēāļĢāļāļĩāđāļāđāļāļĒāļāļ§āđāļēāļāļĒāđāļēāļāđāļŦāđāļāđāļāđāļāļąāļ āļāļēāļāļāļąāļ§āļāļĒāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāđāļēāļāļĨāđāļēāļāļāļ°āđāļŠāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāļŠāđāļĨāļ° thread āļāđāļ§āļĒāļāļģāļāļ§āļ 50,000 āļāļąāļ§ āļ āļēāļĒāđāļāđāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄāđāļāļĩāļĒāļ§āļāļąāļ āđāļāļĒāļāļ°āļĄāļĩāļāļēāļĢāļāļąāļāļŦāļāđāļ§āļĒāđāļ§āļĨāļēāļāļąāđāļāļŠāļēāļĄāđāļāļāļāļ·āļ real time, user time āđāļĨāļ° system time
āļāļēāļĢāļēāļ 5-3 āđāļŠāļāļāļāļĨāļāļēāļĢāļāļāļŠāļāļāļāļāļŦāļāđāļ§āļĒāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļĢāļļāđāļāļāđāļēāļāđ
Ref: https://computing.llnl.gov/tutorials/pthreads/