Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定线程数和未确定线程数有什么区别?_C++_C_Multithreading_Pthreads - Fatal编程技术网

C++ 确定线程数和未确定线程数有什么区别?

C++ 确定线程数和未确定线程数有什么区别?,c++,c,multithreading,pthreads,C++,C,Multithreading,Pthreads,确定螺纹数时的区别是什么,例如: for (i*10){ ... pthread_create(&thread[i], NULL, ThreadMain[i], (void *) xxx); ... } 当它不确定时,就像这样: ... pthread_create(&threadID, NULL, ThreadMain, (void *) xxx); ... 就我而言,数字可以从1变为10。如果我使

确定螺纹数时的区别是什么,例如:

for (i*10){   
    ...   
    pthread_create(&thread[i], NULL, ThreadMain[i], (void *) xxx);   
    ...
}
当它不确定时,就像这样:

    ...  
    pthread_create(&threadID, NULL, ThreadMain, (void *) xxx);   
    ...
就我而言,数字可以从1变为10。如果我使用第一种方法,我需要创建10倍,例如:

void *ThreadMain1(void *xxx)
{  
    ...  
}  
直到

void *ThreadMain10(void *xxx)
{  
    ...  
}   
但是如果我使用第二种方法,我只需要创建:

void *ThreadMain(void *xxx)
{  
    ...  
} 
那么哪一个是正确的呢


感谢您的时间和回复,

如果线程正在执行相同的任务,它们应该使用相同的功能(可能有不同的输入),因此一个ThreadMain是正确的方式。

如果线程正在执行相同的任务,它们应该使用相同的功能(可能有不同的输入),那么一个ThreadMain是正确的方式。

  • 执行相同任务的线程应该使用相同的函数
  • 执行不同任务的线程应该使用不同的函数
      • 执行相同任务的线程应该使用相同的函数
      • 执行不同任务的线程应该使用不同的函数

      除非ThreadMain被定义为函数指针数组,否则第一个方法的语法无效。即:

      pthread_create(&thread[i], NULL, ThreadMain[1], (void *) xxx);
      
      不调用名为ThreadMain1的函数,除非您以前按照以下步骤执行过操作:

      FuncPtr_t ThreadMain[10];
      ThreadMain[1] = &ThreadMain1;
      

      如果您只是试图创建10个运行相同任务的线程,那么第二种方法是正确的

      除非ThreadMain被定义为函数指针数组,否则第一个方法是无效语法。即:

      pthread_create(&thread[i], NULL, ThreadMain[1], (void *) xxx);
      
      不调用名为ThreadMain1的函数,除非您以前按照以下步骤执行过操作:

      FuncPtr_t ThreadMain[10];
      ThreadMain[1] = &ThreadMain1;
      

      如果您只是试图创建10个运行相同任务的线程,那么第二种方法是正确的

      创建10个线程肯定是错误的。为什么?那么你有什么建议?感谢创建10个线程肯定是错误的。为什么?那么你有什么建议?谢谢你!你是对的,这就是我遇到问题的原因。连接的数量取决于要模拟的问题(因为它可以有1个或更多),但限制为10个。事实上,我已经和同步这就是为什么我尝试两者。如果三个客户端连接,通信应按顺序同步,即每次交换1、2、3,直到第一个客户端终止,然后启动第二个客户端。。。这怎么可能?非常感谢你的回答。我真的不明白你想做什么。我认为你应该开始另一个话题,解释你想要实现什么,而不是你认为你应该如何实现它。也许你应该把线程数作为参数xxx来传递,但是如果你想按顺序完成事情,你可能根本不需要线程……对不起!你是对的,这就是我遇到问题的原因。连接的数量取决于要模拟的问题(因为它可以有1个或更多),但限制为10个。事实上,我已经和同步这就是为什么我尝试两者。如果三个客户端连接,通信应按顺序同步,即每次交换1、2、3,直到第一个客户端终止,然后启动第二个客户端。。。这怎么可能?非常感谢你的回答。我真的不明白你想做什么。我认为你应该开始另一个话题,解释你想要实现什么,而不是你认为你应该如何实现它。也许你应该把线程数作为参数xxx来传递,但是如果你想按顺序完成事情,你可能根本不需要线程。。。