gpt4 book ai didi

c++ - Lambda 和线程

转载 作者:太空狗 更新时间:2023-10-29 21:50:19 24 4
gpt4 key购买 nike

我最近开始在线程中大量使用 lambda,并想确保以后不会为线程安全问题/崩溃做好准备。我通常使用它们的方式是:

class SomeClass {  
int someid;
void NextCommand();
std::function<void(int, int)> StoreNumbers;
SomeClass(id, fn); // constructor sets id and storenumbers fn
}

// Called from multiple threads
static void read_callback(int fd, void* ptr)
{
SomeClass* sc = static_cast<SomeClass*>ptr;
..
sc->StoreNumbers(someint,someotherint); // voila, thread specific storage.
}

static DWORD WINAPI ThreadFn(LPVOID param)
{
std::list<int> ints1;
std::list<int> ints2;
auto storenumbers = [&] (int i, int i2) {
// thread specific lambda.
ints1.push_back(i);
ints2.push_back(i2);
};
SomeClass s(id, storenumbers);
...
// set up something that eventually calls read_callback with s set as the ptr.
}

ThreadFn 用作 30-40 个线程的线程函数。

这可以接受吗?我通常有几个线程特定的 lambda,它们对一堆线程特定的数据进行操作。

谢谢!

最佳答案

这里没有问题。使用 lambda 的数据访问与使用命名函数的数据访问没有什么不同,通过内联代码、传统仿函数、使用 bind 或任何其他方式进行。只要一次仅从一个线程调用该 lambda,我就看不到任何线程相关问题的证据。

关于c++ - Lambda 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352558/

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