Newsgroup: it.comp.lang.c++
Titolo: pthreads, cosa sono ?

Ciao,
come da oggetto. Grazie per le risposte.
Giuseppe

Non hanno strettamente a che fare con il C++, per cui, forse, parlarne cui č
un po' fuori luogo.
Comunque sia si tratta di API per il multithreading che sono conformi a uno
standard POSIX.
Se non sai cosa siano i threads, sei un po' in una di quelle grosse macchie
marroni che si trovano sui prati dove pascolano le mucche con un'attivitą
intestinale normale.
Altrimenti, per esempio:
http://dis.cs.umass.edu/~wagner/threads_html/tutorial.html
o
http://www.humanfactor.com/pthreads/
(Presi a caso da Google, cercando "pthreads").
--
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 un'attività intestinale normale.
Complimenti per l'elegante modo usato per evitare la parolaccia !
Grazie della tua esauriente spiegazione. Senti, ma conviene usarli 
al posto della funzione fork ? O è più facile questa ?
Ciao e grazie.
Giuseppe

 al posto della funzione fork ? O è più facile questa ?
Facile, è sicuramente più facile la fork... ma sono cose ben diverse.
I threads sono anche detti Light Weight Processes, cioè processi leggeri.
Questo significa che possono essere schedulati in modo più efficiente perché
non deve avvenire il context switch (l'operazione che passa da un processo a
un altro in un sistema multitask), che è un'operazione piuttosto costosa in
termini di tempo.
Un ottimo motivo per utilizzare i threads piuttosto che i processi è, per
esempio, l'opportunità di far comunicare le unità di esecuzione con costi
minori, poiché diversi thread all'interno di un unico processo condividono
lo stesso spazio di indirizzamento della memoria; due processi che
comunicano, invece, devono appoggiarsi a meccanismi offerti dal sistema
operativo per la collaborazione (i vari meccanismi di IPC = inter process
communication, come memoria condivisa, semafori, cazzi e mazzi).
In realtà la trattazione delle differenze tra processi e threads è cosa
complessa per un messaggio come questo... ma ti consiglio di leggere un
libro sui sistemi operativi, ch'è un argomento veramente figo!
Ma tu -perdona la domanda intima- che ci devi fare?
Rony


 lo stesso spazio di indirizzamento della memoria;
Questo si! Condividono lo stesso spazio di indirizzamento, ma le variabili
che sono attualmente caricate nei registri della CPU sono diverse e quindi
si deve fare un context switch tra un thread e l'altro per eseguirli in
"parallelo".
Questo concetto si applica anche nel caso in cui ci siano 2 CPU in cui una
esegue un thread e l'altra l'altro thread. Questo e' possibilissimo! Il
fatto che sia possibile dovrebbe farti capire che se si una una sola CPU il
context switching ci debba essere!
Tommy

 Ma tu -perdona la domanda intima- che ci devi fare?
Ho intenzione di sviluppare un programma di file sharing su Linux
che supporti il protocollo di napster e direct connect dando la possibilità
di scaricare parti dello stesso file dall'uno e dall'altro protocollo.
Giuseppe

 Giuseppe
OK, pero' le API posix sono scritte per il C, quindi se pensi di sviluppare 
in C++ ti conviene utilizzare una delle librerie costruite per fornirti un 
interfaccia un po piu' OO, cose questa:
 
http://www.cs.wustl.edu/~schmidt/ACE.html
ACE e' in pratica un wrapper per posix, in piu' va per un sacco di sistemi 
operativi (anche Win32).

 di scaricare parti dello stesso file dall'uno e dall'altro protocollo.
Si, i thread possono essere utilizzati alla grande. Attento che fino a che
non ci prendi la mano e' facile che siano motivo di bugs!
Tommy

 fatto che non ci sia context switching.
Era una semplificazione un po' grezza... non è vero che non avviene nulla
del genere, solo non ricordo se si chiami context switching nel caso dei
thread.
Comunque si chiami come vuole, ma nel caso dei processi è senz'altro più
costoso: passare da un thread a un altro all'interno dello stesso processo
vuol dire ripristinare lo stack e il PC, ma non il resto dell'immagine
(tutte le risorse di un processo sono comuni a tutti i suoi thread).
Ain't it?


 Ain't it?
Yes they are indeed! And this is why I agree with you when you say: "I
threads sono anche detti Light Weight Processes, cioè processi leggeri".
Tommy

 C'e' un libro della microsoft press che e' fantastico!
Che libro? L'argomento interessa anche a me.
Ciao,
Cecco

 Ciao,
Per linux e' il PDF da 3.6MB alla pagina:
http://www.advancedlinuxprogramming.com/downloads.html
ed e' freeware (o meglio gratuito).
Per windows, in altre parole quello che mi chiedi tu, e':
Programming Applications for Microsoft Windows by Jeffrey Richter
edito da Microsoft Press, volume di ben 1056 pagine.
e' stato pubblicato a fine '99
Tutti gli argomenti trattati vengono trattati in C/C++ (in pratica in C con
qualche classe e qualche altra rara caratteristica del C++)
I capitoli trattati sono:
- ERROR HANDLING
- UNICODE
- KERNEL OBJECTS
- PROCESSES
- JOBS
- THREAD BASICS
- THREAD SCHEDULING, PRIORITIES, AND AFFINITIES
- THREAD SYNCHRONIZATION IN USER MODE
- THREAD SYNCHRONIZATION WITH KERNEL OBJECTS
- THREAD SYNCHRONIZATION TOOLKIT
- THREAD POOLING
- FIBERS
- WINDOWS MEMORY ARCHITECTURE
- EXPLORING VIRTUAL MEMORY
- USING VIRTUAL MEMORY IN YOU OWN APPLICATIONS
- A THREAD'S STACK
- MEMORY MAPPED FILES
- HEAPS
- DLL BASICS
- DLL ADVANCED TECHNIQUES
- THREAD-LOCAL STORAGE
- DLL INJECTION AND API HOOKING
- TERMINATION HANDLERS
- EXCEPTION HANDLERS AND SOFTWARE EXCEPTIONS
- UNHANDLED EXCEPTIONS AND C++ EXCEPTIONS
- WINDOW MESSAGING
- THE HARDWARE INPUT MODEL AND LOCAL INPUT STATE
Questo e' il libro ideale per chi si e' letto il Petzold sulle Win32 APIs
e/o il Prosise sulle MFCs.
Non e' sicuramente un libro su cui iniziare la programmazione win32.
Tratta argomenti abbastanza avanzati e che piu' uno studia piu' utilizza
(nonostante appena leggi li leggi sul libro potresti dire, e chissene,
riesco a farne a meno).
Scritto moooolto bene lo considero il miglior libro di questi argomenti per
windows in assoluto.
Tratta qualche cosa sul IA64, ma nonostante si sforzi, credo sia stato
scritto troppo presto......
Tutti gli argomenti vengono trattati in modo tale da essere di abbastanza
facile comprensione.
Forse esiste una versione italiana, io ho quella inglese e non ti so dire
quindi.
Tommy

 quindi.
Esiste anche l'edizione italiana; e` di sole 760 pagine, mentre quella originale di 1100... sara` la
formattazione che e` differente, ma mi fiderei di piu` di quella inglese. Comunque penso sia
prematuro comprarlo, visto che sto leggendo il Prosise, ma soprattutto... visto il prezzo ;-)
Ciao e grazie,
Cecco