Example of a Multithreaded C program
Mitch, you have a nice program there.  As I pointed out above, current_search_start is not updated which means 9 of 10 threads are searching the same space and the last searches the whole space.  Minor error though.

Your use of condition variables and mutexes is nicely done.  Overall, nothing significant to comment on. 

Some minor comments:


The precedence of -&gt; is higher than that of * so this:

if (!(*(pUnitOfWork-&gt;shouldStop))) {


can be written: 

if (!(*pUnitOfWork-&gt;shouldStop)) {


or some might prefer:

if (*pUnitOfWork-&gt;shouldStop == false) {


And 

*(pUnitOfWork-&gt;shouldStop) = true;


can omit the parenthesis and be neater.
I would change some variable names.  cValue seems meaningless. pUnitOfWork would be just work.  The p (and vp) prefixes you used look like Hungarian.  I would never use such things unless forced to by an outdated coding convention.
find_value should strictly be static
The loop in find_value would be more normal as a for:

for (int c = work-&gt;start; c &lt; work-&gt;end; ++c) {
    if (*work-&gt;shouldStop) { ... }
    if (c == work-&gt;search) { ... }
}



Also I would add a thread number and some debug to see which thread number is successful (especially with the current_search_start bug, as the thread is not always the same :-)