Traditional verification methods like code review, static analysis and functional testing are not sufficient to fully verify multi-threaded embedded software, because the threads may interact in ways that are not apparent in the source code.
Read the full article (the article appears on page #79).