27.10.2014 Views

Cracking the Coding Interview, 4 Edition - 150 Programming Interview Questions and Solutions

Cracking the Coding Interview, 4 Edition - 150 Programming Interview Questions and Solutions

Cracking the Coding Interview, 4 Edition - 150 Programming Interview Questions and Solutions

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapter 18 | Threads <strong>and</strong> Locks<br />

How to Approach:<br />

In a Microsoft, Google or Amazon interview, it’s not terribly common to be asked to implement<br />

an algorithm with threads (unless you’re working in a team for which this is a particularly<br />

important skill). It is, however, relatively common for interviewers at any company to<br />

assess your general underst<strong>and</strong>ing of threads, particularly your underst<strong>and</strong>ing of deadlocks<br />

Deadlock Conditions<br />

In order for a deadlock to occur, you must have <strong>the</strong> following four conditions met:<br />

1. Mutual Exclusion: Only one process can use a resource at a given time.<br />

2. Hold <strong>and</strong> Wait: Processes already holding a resource can request new ones.<br />

3. No Preemption: One process cannot forcibly remove ano<strong>the</strong>r process’ resource.<br />

4. Circular Wait: Two or more processes form a circular chain where each process is waiting<br />

on ano<strong>the</strong>r resource in <strong>the</strong> chain.<br />

Deadlock Prevention<br />

Deadlock prevention essentially entails removing one of <strong>the</strong> above conditions, but many of<br />

<strong>the</strong>se conditions are difficult to satisfy. For instance, removing #1 is difficult because many<br />

resources can only be used by one process at a time (printers, etc). Most deadlock prevention<br />

algorithms focus on avoiding condition #4: circular wait.<br />

If you aren’t familiar with <strong>the</strong>se concepts, please read http://en.wikipedia.org/wiki/Deadlock.<br />

A Simple Java Thread<br />

1 class Foo implements Runnable {<br />

2 public void run() {<br />

3 while (true) beep();<br />

4 }<br />

5 }<br />

6 Foo foo = new Foo ();<br />

7 Thread myThread = new Thread(foo);<br />

8 myThread.start();<br />

8 5<br />

<strong>Cracking</strong> <strong>the</strong> <strong>Coding</strong> <strong>Interview</strong> | Knowledge Based

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!