Learning From Mistakes -- A Comprehensive Study on real World Concurrency Bug Characteristics