Effective architectural support for detecting concurrency bugs