gpt4 book ai didi

c++ - 为多线程锁定一部分内存

转载 作者:行者123 更新时间:2023-11-27 23:05:36 25 4
gpt4 key购买 nike

我正在尝试编写一些代码来创建可以同时修改内存不同部分的线程。我读到 mutex 通常用于锁定代码,但我不确定我是否可以在我的情况下使用它。示例:

using namespace std;
mutex m;
void func(vector<vector<int> > &a, int b)
{
lock_guard<mutex> lk(m);
for (int i = 0; i < 10E6; i++) { a[b].push_back(1); }
}

int main()
{
vector<thread> threads;
vector<vector<int> > ints(4);
for (int i = 0; i < 10; i++)
{
threads.push_back(thread (func, ref(ints), i % 4));
}
for (int i = 0; i < 10; i++) { threads[i].join(); }
return 0;
}

目前,互斥量只是锁定 func 中的代码,所以(我相信)每个线程都只需要等到前一个线程完成。

我试图让程序同时编辑 ints 的 4 个 vector ,但这确实意识到它必须等到其他线程完成编辑其中一个 vector 之后开始下一个。

最佳答案

我想你想要以下内容:(一个 std::mutex by std::vector<int> )

std::mutex m[4];
void func(std::vector<std::vector<int> > &a, int index)
{
std::lock_guard<std::mutex> lock(m[index]);
for (int i = 0; i < 10E6; i++) {
a[index].push_back(1);
}
}

关于c++ - 为多线程锁定一部分内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783118/

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