gpt4 book ai didi

c++ - 一个互斥锁与多个互斥锁。线程池用哪个好?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:31 27 4
gpt4 key购买 nike

这里的例子,只是想保护iData,保证只有一个线程同时访问它。

struct myData;
myData iData;

方法一,调用函数内部互斥量(可以创建多个互斥量):

    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. 我想确保方法 1(多个互斥锁)确保只有一个线程可以同时访问 iData。
  2. 如果方法 1 正确,不确定方法 1 是否优于方法 2?谢谢!

最佳答案

  1. I want to make sure that the Method 1 (multiple mutexes) ensures that only one thread can visit the iData at the same time.

您的第一个示例在堆栈上创建了一个本地互斥变量,它不会与其他线程共享。因此它完全没有用。
它不保证对 iData 的独占访问。

  1. If Method 1 is correct, not sure Method 1 is better of Method 2?

这是不正确的。

关于c++ - 一个互斥锁与多个互斥锁。线程池用哪个好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45924455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com