Post date: Apr 24, 2009 6:01:39 PM

    • Making two threads take turns to print out "Giraffe", "Zebra", "Giraffe", "Zebra", ... (see attachment turns.c below).
      • Thread execution is concurrent by nature.
      • pthread_yield() and sched_yield() only works when another thread is blocked. On uniprocessor system, they can achieve the interleaving effect, but not on multiprocessor system.
      • Don't bother with sleep.
      • Use the "turns" critical section.
    • Array out of bounds access memory corruption (see corrupt.c below).
      • We read a line that is longer than what the buffer could hold, causing array out of bounds access.
      • Some memory is corrupted after the buffer, but that doesn't show during execution.
      • The corruption causes segmentation fault at seemingly unrelated spot in code.