CS 476 Programming Language Design William Mansky Concurrency

  • Slides: 22
Download presentation
CS 476 – Programming Language Design William Mansky

CS 476 – Programming Language Design William Mansky

Concurrency • In a concurrent (parallel) program, multiple sections of code execute at the

Concurrency • In a concurrent (parallel) program, multiple sections of code execute at the same time (threads, processes, etc. ) • “One thread executes for a while, then stops, then the other thread executes” is an acceptable implementation • More generally, any possible interleaving of the threads is a possible behavior of a concurrent program 1

Concurrency • More generally, any possible interleaving of the threads is a possible behavior

Concurrency • More generally, any possible interleaving of the threads is a possible behavior of a concurrent program while(x < 100){ x = x + 1; } while(y < 200){ y = y + 2; } {x = 0, y = 0}, {x = 1, y = 0}, {x = 2, y = 2}, {x = 2, y = 4}, … 2

Concurrency • More generally, any possible interleaving of the threads is a possible behavior

Concurrency • More generally, any possible interleaving of the threads is a possible behavior of a concurrent program while(x < 100){ x = x + 1; } while(y < 200){ y = y + 2; } {x = 0, y = 0}, {x = 1, y = 0}, {x = 2, y = 0}, {x = 3, y = 0}, {x = 4, y = 0}, … 3

Concurrency: Syntax • 4

Concurrency: Syntax • 4

Concurrency: Typing and Semantics 5

Concurrency: Typing and Semantics 5

Concurrency: Shared Variables while(x < 100){ x = x + 1; } while(y <

Concurrency: Shared Variables while(x < 100){ x = x + 1; } while(y < 200){ y = y + 2; } {x = 0, y = 0}, {x = 1, y = 0}, {x = 2, y = 2}, {x = 2, y = 4}, … 6

Concurrency: Shared Variables while(x < 100){ x = x + 1; } while(x <

Concurrency: Shared Variables while(x < 100){ x = x + 1; } while(x < 200){ x = x + 2; } {x = 0}, {x = 1}, {x = 3}, … 7

Concurrency: Shared Variables x = 0; x = x + 1; {x = 2}

Concurrency: Shared Variables x = 0; x = x + 1; {x = 2} 8

Concurrency: Shared Variables x = 0; y = x; 1 x = y +

Concurrency: Shared Variables x = 0; y = x; 1 x = y + 1; 3 z = x; 2 4 x = z + 1; {x = ? } 9

Concurrency: Shared Variables x = 0; y = x; 1 x = y +

Concurrency: Shared Variables x = 0; y = x; 1 x = y + 1; 3 z = x; 2 4 x = z + 1; {x = 1} 10

Concurrency: Shared Variables x = 0; acquire(s); x = x + 1; release(s); {x

Concurrency: Shared Variables x = 0; acquire(s); x = x + 1; release(s); {x = 2} 11

Concurrency: Locks • 12

Concurrency: Locks • 12

Concurrency: Locks {x = 0, s = 0} acquire(s); x = x + 1;

Concurrency: Locks {x = 0, s = 0} acquire(s); x = x + 1; release(s); 13

Concurrency: Locks {x = 0, s = 1} x = x + 1; release(s);

Concurrency: Locks {x = 0, s = 1} x = x + 1; release(s); acquire(s); x = x + 1; release(s); 14

Concurrency: Locks {x = 1, s = 1} release(s); acquire(s); x = x +

Concurrency: Locks {x = 1, s = 1} release(s); acquire(s); x = x + 1; release(s); 15

Concurrency: Locks {x = 1, s = 0} acquire(s); x = x + 1;

Concurrency: Locks {x = 1, s = 0} acquire(s); x = x + 1; release(s); 16

Concurrency: Fork-Join • 17

Concurrency: Fork-Join • 17

Concurrency: Fork-Join x = x + 1; int x = 0; int main(){ tid

Concurrency: Fork-Join x = x + 1; int x = 0; int main(){ tid t = fork(thread_fun); x = x + 1; join(t); } void thread_fun(){ x = x + 1; } 18

Concurrency: Fork-Join Syntax E : = <#> | <ident> | E + E |

Concurrency: Fork-Join Syntax E : = <#> | <ident> | E + E | … C : = … | <ident> = fork(<ident>); | join(E); T : = … | tid 19

Concurrency: Fork-Join Semantics • 20

Concurrency: Fork-Join Semantics • 20

Concurrency: Fork-Join Semantics 21

Concurrency: Fork-Join Semantics 21