这是thread使用引用计数模板来处理多线程访问共享资源 的问题 #include <zthread/runnable.h> #include <zthread/Thread.h> #include <zthread/Countedptr.h> #include <iostream> #pragma comment(lib,"ZThread_Z.lib") class Count { enum {s =100}; int n[s]; public: void increment() { for(int i=0;i<s;i++) n[i]++; } }; class thread : public ZThread::Runnable { ZThread::CountedPtr<Count> count; public: thread(const ZThread::CountedPtr<Count>& c): count(c){} void run() { for(int i=100;i>0;i--) ZThread::Thread::sleep(1); count->increment(); } }; int _tmain(int argc, _TCHAR* argv[]) { ZThread::CountedPtr<Count> count(new Count); try { ZThread::Thread t0(new thread(count)); ZThread::Thread t1(new thread(count)); // Z//Thread::Thread t2(new thread(count)); printf("start /n"); } catch(ZThread::Synchronization_Exception& e) { printf("%s",e.what()); } _sleep(20000); return 0; } 由于t0 和t1都是引用的同一对象 所以实际上2者是同一对象。那么在这种情况下应该在最后调度该对象的线程结束时释放该对象 明天继续!