While multi-core processor designs allow peak performance to track Moore's law, they introduce new challenges for software developers. Explicitly multi-threaded programs generally take longer to develop, test, debug, and verify than sequential programs with equivalent functionality. Implicit parallelization, on the other hand, allows software engineers to develop parallel algorithms and applications in environments that provide sequential semantics, like the C programming language. System tools convert the parallel algorithms into a set of threads partitioned appropriately for a particular parallel machine organization. The resulting parallel programs are easier and faster to develop, debug, and maintain, because the programmer can request a meaningful and well defined program state at any point of execution. Because error checking code, code reuse, and variable scoping interfere with naive parallelization, this work will investigate system tools that perform reactive and speculative transformations to reduce the tension between application robustness and parallelization.