gpt4 book ai didi

c++ - 将数据结构传递给不同的线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:56 25 4
gpt4 key购买 nike

我有一个将产生多个线程的应用程序。但是,我觉得线程访问不应该访问的数据可能存在问题。

这是线程应用程序的结构(抱歉粗鲁):

                   MainThread
/ \
/ \
/ \
Thread A Thread B
/ \ / \
/ \ / \
/ \ / \
Thread A_1 Thread A_2 Thread B_1 Thread B_2

在每个带字母的线程(可能有很多)下,只会有两个线程,它们是按顺序触发的。我遇到的问题是我不完全确定如何将数据结构传递到这些线程中。

因此,数据结构在 MainThread 中创建,将在特定于该线程的字母线程(线程 A 等)中进行修改,然后该数据结构的成员变量被发送到 Letter_Numbered 线程。

目前,带字母的线程类有一个成员变量,在构造类时,主线程的数据结构通过引用传入,调用复制构造函数,因此带字母的线程有自己的拷贝可以使用。

lettered_numbered 线程只是从字母线程中的数据结构中获取一个字符串变量。我的问题是,这是可以接受的吗?有没有更好的方法来确保每个字母线程都有自己的数据结构来使用?

抱歉,解释得有些糟糕,请发表评论,我会尽力澄清。

编辑:所以我的带字母的线程构造函数应该采用数据结构的 VALUE,而不是引用?

最佳答案

我会让每个线程创建它自己的数据结构拷贝,例如您在构造函数中传递结构,然后显式创建本地拷贝。然后你保证线程有不同的拷贝。 (你说它是通过引用传递的,并且这调用了复制构造函数。我认为你的意思是通过值传递?我觉得最好明确地制作一个拷贝,毫无疑问并明确你的意图。否则以后有人可能过来把你的按值传递更改为按引用传递作为“智能优化”。)

编辑:删除了关于字符串的评论。出于某种原因,我假设是 .NET。

要确保字符串是私有(private)的,请遵循相同的过程,创建字符串的拷贝,然后您可以自由修改。

关于c++ - 将数据结构传递给不同的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789852/

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