Concorrenza e Threading

In questa lezione abbiamo visto i principi fondamentali della concorrenza, e piu' i particolare il modello di programmazione a thread. Dal punto di vista teorico, abbiamo introdotto i concetti di memoria condivisa e passaggio di messaggi, nonche' alcuni modelli di concorrenza (spazio di tuple, modello ad attori, algebre dei processi).

In fondo alla pagina trovate gli esempi di codice visti a lezione.

Concurrency & Threading

In this lecture we have studied the fundamentals of concurrency, and specifically the thread programming model. On the theoretical side, we've introduced the concepts of shared memory and message passing, as well as some concurrency models (tuple space, actor model, process calculus).

Esempi di programmazione con i Thread/Code samples for Threading

Hello, World

#!/usr/bin/python
from threading import Thread
from time import sleep
from random import randint
 
def hello():
        sleep(randint(0,3))
        print 'Hello'
 
def world():
        sleep(randint(0,3))
        print 'World'
 
Thread(target=hello).start()
Thread(target=world).start()

A Producer/Consumer Example

#!/usr/bin/python
 
from threading import Thread, Event
from random import randint
 
d=0
e=[Event(),Event()]
e[1].set()
 
def hello(e):
        for i in range(5) :
                e[1].wait()
                global d
                d=d+1
                e[0].set()
                e[1].clear()
 
def world(e):
        for i in range(5) :
                e[0].wait()
                global d
                print d*2
                e[0].clear()
                e[1].set()
 
Thread(target=hello, args=(e,)).start()
Thread(target=world, args=(e,)).start()