#include #include #include #include #include // g++-mp-4.3 -I /opt/local/include/ -Wl,-L/opt/local/lib y.cpp -Wl,-lboost_thread-xgcc40-mt // cl -Zi -I c:\local\boost\boost_1_35_0 y.cpp -EHsc -link -libpath:c:\local\boost\boost_1_35_0\lib-x86 namespace ipc= boost::interprocess; namespace bptime= boost::posix_time; typedef ipc::scoped_lock ipc_lock; void timelogmsg(bptime::ptime& t0, const char*msg) { bptime::ptime t1(bptime::microsec_clock::universal_time()); printf("%8d %s\n", (long)(t1-t0).total_milliseconds(), msg); t0= t1; } int main(int argc,char**) { if (argc>1) { // server ipc::named_mutex::remove("itsmesmutex"); printf("removed\n"); ipc::named_mutex mtx(ipc::open_or_create, "itsmesmutex"); printf("svr created\n"); bptime::ptime t0(bptime::microsec_clock::universal_time()); for (int i=0 ; i<10 ; i++) { if (1) { ipc_lock lock(mtx); timelogmsg(t0, "svr locked"); boost::this_thread::sleep(bptime::milliseconds(2000)); } timelogmsg(t0, "svr unlocked"); boost::this_thread::sleep(bptime::milliseconds(1200)); } } else { // client ipc::named_mutex mtx(ipc::open_only,"itsmesmutex"); printf("clt opened\n"); bptime::ptime t0(bptime::microsec_clock::universal_time()); for (int i=0 ; i<10 ; i++) { if (1) { ipc_lock lock(mtx); timelogmsg(t0, "clt locked"); boost::this_thread::sleep(bptime::milliseconds(1500)); } timelogmsg(t0, "clt unlocked"); boost::this_thread::sleep(bptime::milliseconds(1700)); } } }