這裏的例子只是想保護iData
以確保只有一個線程同時訪問它。一個互斥對比多個互斥。哪一個更適合線程池?
struct myData;
myData iData;
方法1,調用函數中的互斥體(可以創建多個互斥鎖):
void _proceedTest(myData &data)
{
std::mutex mtx;
std::unique_lock<std::mutex> lk(mtx);
modifyData(data);
lk.unlock;
}
int const nMaxThreads = std::thread::hardware_concurrency();
vector<std::thread> threads;
for (int iThread = 0; iThread < nMaxThreads; ++iThread)
{
threads.push_back(std::thread(_proceedTest, iData));
}
for (auto& th : threads) th.join();
方法二,只用一個互斥體:
void _proceedTest(myData &data, std::mutex &mtx)
{
std::unique_lock<std::mutex> lk(mtx);
modifyData(data);
lk.unlock;
}
std::mutex mtx;
int const nMaxThreads = std::thread::hardware_concurrency();
vector<std::thread> threads;
for (int iThread = 0; iThread < nMaxThreads; ++iThread)
{
threads.push_back(std::thread(_proceedTest, iData, mtx));
}
for (auto& th : threads) th.join();
- 我要打確保方法1(多重互斥鎖)確保只有一個線程可以同時訪問iData。
- 如果方法1是正確的,不確定方法1比方法2更好嗎? 謝謝!
您的意思是方法1並不保證iData僅被一個線程訪問? – lightrek
它應該如何在不同線程之間共享'std :: mutex'? – user0042