假设我有一个类代表一些名为 foo 的数据结构:
\n\nclass foo{\n public:\n foo(){\n attr01 = 0;\n }\n void f(){\n attr01 += 5;\n }\n private:\n int attr01;\n};\n\nclass fooSingleThreadUserClass{\n void usefoo(){\n fooAttr.f();\n }\n\n foo fooAttr;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n现在假设在软件构建的后期,我发现我需要多线程。我应该在 foo 中添加互斥体吗?
\n\nclass foo{\n public:\n foo(){\n attr01 = 0;\n }\n void f(){\n attr01Mutex.lock();\n attr01 += 5;\n attr01Mutex.unlock();\n }\n private:\n int attr01;\n std::mutex attr01Mutex;\n};\n\nclass fooMultiThreadUserClass{\n void usefoo(){\n std::thread t1(&fooMultiThreadUserClass::useFooWorker, this);\n std::thread t2(&fooMultiThreadUserClass::useFooWorker, this);\n std::thread t3(&fooMultiThreadUserClass::useFooWorker, this);\n std::thread t4(&fooMultiThreadUserClass::useFooWorker, this);\n\n t1.join();\n t2.join();\n t3.join();\n t4.join();\n }\n\n void useFooWorker(){\n fooAttr.f();\n }\n\n foo fooAttr;\n}\n …Run Code Online (Sandbox Code Playgroud)