C++ 在C窗口中,向线程传递参数的最佳方式是什么?

C++ 在C窗口中,向线程传递参数的最佳方式是什么?,c++,c,windows,multithreading,arguments,C++,C,Windows,Multithreading,Arguments,嗨 我有一个使用两个变量的线程。 变量在运行时从argv[]确定 在我看来,我的选择是: 使变量成为全局变量,以便线程可以使用它们(不需要保护它们,因为线程不会更改它们)。我不愿意使用这个,因为全局变量不是很好 创建一个结构来保存变量并将其传递给线程。varibales并不是真正相关的,因此它将是一个“强制”结构,除了线程的参数之外没有其他意义。而且,比选项1更复杂 还有其他选择吗?哪一个被认为更好 谢谢 它将是一个“强制”结构,除了线程的参数之外没有其他意义 这听起来像是结构的一个很好的用途。

嗨 我有一个使用两个变量的线程。 变量在运行时从argv[]确定

在我看来,我的选择是:

  • 使变量成为全局变量,以便线程可以使用它们(不需要保护它们,因为线程不会更改它们)。我不愿意使用这个,因为全局变量不是很好

  • 创建一个结构来保存变量并将其传递给线程。varibales并不是真正相关的,因此它将是一个“强制”结构,除了线程的参数之外没有其他意义。而且,比选项1更复杂

  • 还有其他选择吗?哪一个被认为更好

    谢谢

    它将是一个“强制”结构,除了线程的参数之外没有其他意义

    这听起来像是结构的一个很好的用途。数据成员都是相关的,因为它们都需要传递给线程

    它实际上并不比第一个选项复杂(除非你认为定义一个结构和复制几个变量是复杂的)。当然,它的代码要多一点,但它也应该使查看代码和查看提供给线程的确切数据变得更容易

    它将是一个“强制”结构,除了线程的参数之外没有其他意义

    这听起来像是结构的一个很好的用途。数据成员都是相关的,因为它们都需要传递给线程


    它实际上并不比第一个选项复杂(除非你认为定义一个结构和复制几个变量是复杂的)。当然,这是更多的代码,但也应该使查看代码更容易,并准确地看到哪些数据提供给线程。

    第二种方法是正确的,这没有什么真正的问题。全局变量在多线程处理中变得特别麻烦。如果在执行过程中发生任何更改,它们甚至会出现问题,因为在修改它们时,您需要某种互斥(或其他)来保护它们。它们很容易成为瓶颈,因为在使用这些全局变量时,所有内容都会序列化


    我还要提到,如果一个线程的参数真的是完全不相关的,我必须想知道你的线程在做什么,尤其是设计是否可能不需要做一些工作。应该有一个逻辑关系,原因很简单,线程所做的事情本身应该是逻辑的——如果输入实际上是不相关的,那么对它们的操作可能也应该是分开的。

    第二种方法是正确的,这没有什么真正的问题。全局变量在多线程处理中变得特别麻烦。如果在执行过程中发生任何更改,它们甚至会出现问题,因为在修改它们时,您需要某种互斥(或其他)来保护它们。它们很容易成为瓶颈,因为在使用这些全局变量时,所有内容都会序列化


    我还要提到,如果一个线程的参数真的是完全不相关的,我必须想知道你的线程在做什么,尤其是设计是否可能不需要做一些工作。应该有一个逻辑关系,原因很简单,线程所做的事情本身应该是逻辑的——如果输入实际上是不相关的,那么对它们的操作也应该是独立的。

    有一个原因允许您将参数传递给线程——使用它。除非你别无选择,否则不要使用globals。这里的教条是说不要使用globals。如果参数在进程生命周期内保持不变,那么全局变量有什么问题?我无法编写此应用程序am answer,因为教条主义者会投票否决它。允许您向线程传递参数是有原因的——使用它。除非你别无选择,否则不要使用globals。这里的教条是说不要使用globals。如果参数在进程生命周期内保持不变,那么全局变量有什么问题?我不能写这个应用程序,因为教条主义者会投票否决它。此外,当您(或其他人)决定线程需要修改变量时,您会后悔使用全局变量,但忘记了考虑线程之间共享变量…+1。此外,当您(或其他人)决定线程需要修改变量时,您会后悔使用全局变量,但忘记了考虑线程之间共享变量。。。