OpenMP requires a compiler that supports it, and works with pragmas. The advantage to this is that when compiling without OpenMP-support (e.g. PCC or Clang/LLVM as of now), the code will still compile. Also, have a look at what Charles Leiserson wrote about DIY multithreading (1).
Pthreads is a POSIX standard (IEEE POSIX 1003.1c (2)) for libraries, while OpenMP specifications (3) are to be implemented on compilers; that being said, there are a variety of pthread implementations (e.g. OpenBSD rthreads, NPTL), and a number of compilers that support OpenMP (e.g. GCC with the -fopenmp flag, MSVC++ 2008).
Pthreads are only effective for parallelization when multiple processors are available, and only when the code is optimized for the number of processors available. Code for OpenMP is more-easily scalable as a result. You can mix code that compiles with OpenMP with code using pthreads, too.
1: cilk.com/multicore-blog/bid/5847/The-Folly-Of-Do-It-Yourself-Multithreading
2: opengroup.org/onlinepubs/009695399/basedefs/pthread.h.html
3: openmp.org/wp/openmp-specifications/