Posix Threads. En studie i förvirring eller Halleluja! Peter Eriksson, Signum Support AB 1



Relevanta dokument
Fö 4 TSEA81. Monitors and Message passing

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

Trådar och Multiprocessorer. Föreläsning 6

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Contention. Small-Scale Shared Address Space Multiprocessor (MIMD) Bandbredd till minnet & cacheminnen i multiprocessors

Strategier för att utnytja parallella system. Peter Kjellström NSC Upplysning

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

(2) Skriv ett program som skapar ett antal processer vars relationer beskrivs av nedanstående tidsdiagram a

HI1025 Operativsystem 7.0 hp, KTH Haninge, VT2017

Tentamen. Datorteknik och realtidssystem

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

2... uppvisa förmåga att skapa och/eller hantera flerprocessiga program där de ingående processerna ges

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Parallellism, återblick

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Typkonvertering. Java versus C

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Utkast. Programmering. Signals. Olika typer av program. Sommarkurs Avbrott i mjukvara.

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Fö 5+6 TSEA81. Reflektion av Lab 2. clock.c (module) Real-time kernel + Real-time OS

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

SMD 134 Objektorienterad programmering

Varför behövs det? I Allegro finns t.ex. stöd för:

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Operativsystem - Processkommunikation

Operativsystem (ID2200/06) XX XX:00-XX:00

Lite om länkade strukturer

C-programmering, föreläsning 2 Jesper Wilhelmsson

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

En kort text om programmering i C.

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

printenv sort pager printenv grep args sort pager

Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen

Operativsystem ID1200/06 Tentamen :00-18:00

Signaler. Icke tillförlitliga signaler. Vad göra?

Föreläsning 2: Avlusning och antilustekniker

Tillfälle 14 (F): Fördjupat studium av parallellitet och synkronisering: processer, trådar, schemaläggning och signaler.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Tellstick-15.c. Kompilering av programmet: gcc -o tellstick-15 -Wall -ltelldus-core -W -O2 -s -pipe -lm tellstick-15.c

Programmering av grafisk display

Mekanismer. (implementation)

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmering av grafisk display

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Operativsystem ID2200/06 omtentamen :00-18:00

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Fö 2 TSEA81 Datorteknik och realtidssystem

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Fö 8 TSEA81. Real-time Linux

F5: Högnivåprogrammering

Programmering i C, 7,5 hp

Övning från förra gången: readword

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

#include <pthread.h> #include <stdio.h> int p1[2]; void* char_print (void* parameter) { int fds; fds = *((int *)parameter); int i;

Synkronisering. Ordning och reda

SMD 134 Objektorienterad programmering

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

F5: Högnivåprogrammering

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F4. programmeringsteknik och Matlab

Skizz till en enkel databas

Programmeringsteknik med C och Matlab

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmering av inbyggda system

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Operativsystem ID2200/06 omtentamen :00-12:00

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Föreläsning 6: Metoder och fält (arrays)

Pekare och arrayer. Indexering och avreferering

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Inledande programmering med C# (1DV402) Introduktion till C#

Objektorienterad Programmering (TDDC77)

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

PROGRAMMERING A VC# 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL C#

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

HI1025 Operativsystem, KTH Haninge, VT2012

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Grundprogrammen. combine

Hantering av textsträngar och talsträngar. William Sandqvist

Concurrency Saker händer samtidigt. Process En instans av ett program

Programmering i C++ EDA623 Något om C# EDA623 (Föreläsning 14) HT / 17

Programsystemkonstruktion med C++

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Transkript:

Posix Threads En studie i förvirring eller Halleluja! Peter Eriksson, Signum Support AB 1

Innehåll l Översikt l Programmering l Kompilering l Vanliga problem l Dokumentation l Övrigt Peter Eriksson, Signum Support AB 2

Översikt l Introduktion l Implementationer l Operativsystem l Prestanda Peter Eriksson, Signum Support AB 3

Introduktion l Vad är en tråd? l Varför tråda ett program? l Fördelar l Nackdelar Peter Eriksson, Signum Support AB 4

Implementationer l Pthreads (POSIX P1003.1c) l DCE Threads l UI Threads l Windows NT Peter Eriksson, Signum Support AB 5

Operativsystem l Sun Solaris 2.5 l Redhat Linux 5.0 l SGI IRIX 6.3 l HP HP-UX 10.30 l DEC DigitalUnix 4.0 Peter Eriksson, Signum Support AB 6

Prestanda l Skapa en tr åd: ~52µs l Skapa en process: ~1700µs l Trådsynkronisering: ~66µs l Processsynkronisering: ~200µs (SPARCstation 2, Solaris 2.4) Peter Eriksson, Signum Support AB 7

Programmering l Att skapa trådar l Synkronisering l Biblioteksstöd l Signalhantering l TSD (trådlokala globala variabler) l Avancerad programmering Peter Eriksson, Signum Support AB 8

Att skapa trådar l pthread_create() l pthread_exit() l pthread_join() l pthread_self() l pthread_equal() Peter Eriksson, Signum Support AB 9

Exempel void *my_thread(void *arg) { puts(arg); return NULL; } int main(int argc, char *argv[]) { pthread_t tid; void *retval; } pthread_create(&tid, NULL, my_thread, hello world ); pthread_join(tid, &retval); Peter Eriksson, Signum Support AB 10

Synkronisering l mutex l condition variables l Initialiseringskontroll l Är det allt? Peter Eriksson, Signum Support AB 11

MUTual EXclusion Locks l pthread_mutex_init() l pthread_mutex_lock() l pthread_mutex_unlock() l pthread_mutex_trylock() Peter Eriksson, Signum Support AB 12

Exempel pthread_mutex_t mtx; int cnt = 0; int add_val(int val) { int sum; pthread_mutex_lock(&mtx); sum = cnt += val; pthread_mutex_unlock(&mtx); return sum; } Peter Eriksson, Signum Support AB 13

Condition variables l pthread_cond_init() l pthread_cond_wait() l pthread_cond_timedwait() l pthread_cond_signal() l pthread_cond_broadcast() Peter Eriksson, Signum Support AB 14

Exempel pthread_mutex_t pthread_cond_t int active = 0; int max = 10; mtx; cv; void test_init(void) { pthread_mutex_init(&mtx, NULL); pthread_cond_init(&cv, NULL); } Peter Eriksson, Signum Support AB 15

Exempel, del 2 void *my_thread(void *arg) {... pthread_mutex_lock(&mtx); if (active == max) pthread_cond_signal(&cv); --active; pthread_mutex_unlock(&mtx); return NULL; } Peter Eriksson, Signum Support AB 16

Exempel, del 3 void start_new_thread(void) { pthread_t tid; } pthread_mutex_lock(&mtx); while (active >= max) pthread_cond_wait(&cv, &mtx); active++; pthread_mutex_unlock(&mtx); pthread_create(&tid, NULL, my_thread, NULL); Peter Eriksson, Signum Support AB 17

Initialiseringskontroll l pthread_once() Peter Eriksson, Signum Support AB 18

Exempel pthread_once_t once_cntrl = PTHREAD_ONCE_INIT; static void my_init(void) {... initialize something... } int my_function(int arg) { pthread_once(&once_cntrl, my_init);... do something... } Peter Eriksson, Signum Support AB 19

Är det allt? l rwlocks l semaforer l spinlocks Peter Eriksson, Signum Support AB 20

Biblioteksstöd l Systemanrop l errno l fork() / pthread_atfork() l Trådsäkra funktioner l Manuellt låsbara funktioner l Trådosäkra funktioner Peter Eriksson, Signum Support AB 21

Systemanrop l Trådsäkra l Blockar enbart tråden Peter Eriksson, Signum Support AB 22

errno l M åste inkludera <errno.h> Peter Eriksson, Signum Support AB 23

Trådsäkra funktioner l Läs manualsidan! l Thread-Safe vs Reentrant l POSIX trådsäkra funktioner (_r) Peter Eriksson, Signum Support AB 24

Manuellt låsbara funktioner l flockfile() / ftrylockfile() / funlockfile() l getc_unlocked() / getchar_unlocked() l putc_unlocked() / putchar_unlocked() Peter Eriksson, Signum Support AB 25

Trådosäkra funktioner l Använder static data, fel errno etc... l Undvik helst... l Om ej möjligt, anropa från main-tråden Peter Eriksson, Signum Support AB 26

Signalhantering l pthread_kill() l sigwait() l pthread_sigmask() l Async-safe l longjmp() l Tips: All signalhantering i en tråd Peter Eriksson, Signum Support AB 27

Exempel int main(int argc, char *argv[]) { sigset_t set; pthread_t tid; int sig;... sigemptyset(&set); sigaddset(&set, SIGHUP); pthread_sigmask(sig_block, &set, NULL); pthread_create(&tid, NULL, my_thread, NULL); while (sigwait(&set, &sig) == 0) { switch (sig) { case SIGHUP: do_something();... Peter Eriksson, Signum Support AB 28

TSD (trådlokala data) l pthread_key_create() l pthread_key_delete() l pthread_setspecific() l pthread_getspecific() Peter Eriksson, Signum Support AB 29

Exempel static pthread_key_t static pthread_once_t my_key; once = PTHREAD_ONCE_INIT; /* To be called via pthread_once_init() */ static void my_init(void) { pthread_key_create(&my_key, free); } Peter Eriksson, Signum Support AB 30

Exempel, del 2 char *my_fun(int val) { char *res; } pthread_once_init(&once, &my_init); res = pthread_getspecific(my_key); if (res == NULL) { res = malloc(4711); pthread_setspecific(my_key, res); }... return res; Peter Eriksson, Signum Support AB 31

Avancerad programmering l Trådcancellering l Trådning av gamla program l Multipla processorer l Parallell beräkning Peter Eriksson, Signum Support AB 32

Kompilering l #define _POSIX_C_SOURCE=199506L l -lpthreads l #define _REENTRANT Peter Eriksson, Signum Support AB 33

Vanliga problem l static -deklarerade variabler l Globala variabler l Deadlocks l Djupt rekursiva funktioner l Använd invariants för felkontroll! Peter Eriksson, Signum Support AB 34

Dokumentation l Programming with Threads (Kleiman, Shah & Smaalders, Prentice Hall, ISBN 0-13-172389-8) l Multithreaded Programming Guide (Sun Answerbook) l Threads Primer (Lewis & Berg, SunSoft Press, ISBN 0-13-443698-9) l Programming with POSIX Threads (Butenhof, Addison-Wesley, ISBN 0-201-63392-2) Peter Eriksson, Signum Support AB 35

Övrigt l Avlusning (gdb, debugger, printf) l lock_lint, tnfview l comp.programming.threads Peter Eriksson, Signum Support AB 36