1.多个线程如何创建;2.如何创建互斥(ACE_Thread_Mutex; 3.创建公共数据资源; 4.互斥体的获取与释放; /**同步与不同步的结果, *UpdateData不进行同步 *UpdataMutexData使用互斥进行同步 */ class SyncData { public: SyncData():i_(0){} //不使用同步 void UpdateData() { for(int i = 0; i < 20; i++) { i_++; ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%t)i_ = %d/n"),i_)); } } //使用同步 void UpdateMutexData() { mutex.acquire(); for(int i = 0; i < 20; i++) { i_++; ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%t)i_ = %d/n"),i_)); } mutex.release(); } private: int i_; ACE_Thread_Mutex mutex; //互斥 }; class TestSyncData : public ACE_Task_Base { public : TestSyncData(SyncData& sd):sd_(sd){ } virtual int svc() { //此函数调用结果为:不管运行多少个线程,每一次打印的20个数组均在为同一个线程。 sd_.UpdateMutexData(); //此函数调用结果为:多个线程交互打印数据 //sd_.UpdateData(); return 0; } private: SyncData& sd_; }; //创建两个线程,查看其数据输出的顺序是否有交叉现象。 void TestSyncDataFunc() { SyncData sd; TestSyncData tsd1(sd); TestSyncData tsd2(sd); tsd1.activate(); tsd2.activate(); tsd1.wait(); tsd2.wait(); } int ACE_TMAIN(int argc, ACE_TCHAR* argv[]) { ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%t) is parent thread/n"))); TestSyncDataFunc(); return 0; }