Traditional verification methods like code review, static analysis and functional testing are necessary but not sufficient to fully verify multi-threaded embedded software, because the threads may interact in ways that are not apparent in the source code. Multi-threading can therefore make your software more complex and verification more challenging.
Read the full article (the article appears on page #42).