Lecture Notes for Concurrent Programming

29 May 2003 - Concurrent Programming


Outline


Concurrency Types


Concurrency Styles


Iterative Concurrency


Iterative Concurrency Example


Recursive Concurrency


Recursive Concurrency Example


int pivot(int a[], left, right)

  int m = (right - left)/2

  # a[left..m - 1] <= a[m] < a[m + 1..right]

  return m


void qsort(int a[], int left, int right)

  if right - left < 2
    skip

  else if right - left == 2
    if a[left] > a[right]
      swap(a[left], a[right])

  else
    m = pivot(a, left, right)
    co qsort(a, left, m)
    // qsort(a, m + 1, right) 
    oc
    

int main() 

  int a[] = read()
  qsort(a, 0, a.size())  


Interacting-Peer Concurrency


Interacting-Peer Example


Client-Server Concurrency


Client-Server Example


Producer-Consumer Concurrency


Producer-Consumer Example

procedure read(queue q)
  while !eof
    q.put(read())
  q.put(stop)

procedure work (queue in, queue out)
  while true
    x = in.get()
    if x == stop, break
    out.put(f(x))
  out.put(stop)

procedure write(queue q)
  while true
    x = q.get()
    if x == stop, break
    write(x)

procedure main()

  queue read2work, work2write

  co read(read2work)
  || work(read2work, work2write)
  || write(work2write)
  oc


Points to Remember.


This page last modified on 29 May 2003.