Module 21: Problem and Solution
  Lecture 42: Multi-core ComputingInter-process Communication
 


Cooperating Processes

  • Inter process communication
    • Shared memory between processes
    • Message passing
  • Producer consumer relationship

IPC: Shared Memory

  • Shared buffer between processes
    #define BUF_SZ 1024
    typedef struct {
    ...
    } BUF_Data;
    struct {
    BUF_Data items[BUF_SZ];
    int inptr, outptr; /* Global variables */
    } buffer;/* Must be shared between
    /* two processes */

Producer and Consumer Code

void produce(BUF_Data item) {
while ((buffer.inptr+1)%BUF_SZ == buffer.outptr) ;
buffer.items[buffer.inptr] = item;
buffer.inptr = (buffer.inptr +1)%BUF_SZ;
}
BUF_Data consume(void) {
BUF_Data item;
while (buffer.outptr == buffer.inptr) ;
item = buffer.items[buffer.outptr];
buffer.outptr = (buffer.outptr +1)%BUF_SZ;
return (item);
}