I am on C2D (Core 2 Duo Intel) and your code is working fine on my machine; all threads started and both core had used;
I make a little change; I renamed your class from "shared_mutex" to "shared_mutex1" and same for constructors and destructors.
I was getting redefination of that class. After changing name; every thing is working fine.
io_service.stop();
thread1.join();
thread2.join();
thread3.join();
thread4.join();