这里的例子只是想保护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