C 如何在简单的Pthread编程中分配数组变量?

C 如何在简单的Pthread编程中分配数组变量?,c,arrays,pthreads,variable-assignment,C,Arrays,Pthreads,Variable Assignment,我是Pthread编程的新手 我一直在尝试以一种非常简单的方式使用Pthread,就像下面的代码一样,它在我的代码块中运行良好,因为我已经包含了dll和bin文件 #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *printNumber(void *x); int main(){ pthread_t threadA, threadB, threadC, threadD

我是Pthread编程的新手

我一直在尝试以一种非常简单的方式使用Pthread,就像下面的代码一样,它在我的代码块中运行良好,因为我已经包含了dll和bin文件

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *printNumber(void *x);

int main(){
    pthread_t threadA, threadB, threadC, threadD;
    pthread_create(&threadA, NULL, printNumber, (void *)"Sponge");
    pthread_create(&threadB, NULL, printNumber, (void *)"Star");
    pthread_create(&threadC, NULL, printNumber, (void *)"Squid");
    pthread_create(&threadD, NULL, printNumber, (void *)"Crab");
    pthread_exit(NULL); 
    return 0;
}

void *printNumber(void *x){
    char* id = (char*)x;
    int i;
    for(i=0;i<100;i++){
        printf("Thread %s: printing integer value %i\n", id, i);
    }
    pthread_exit(NULL);
}
以下是我的问题:

  • 为什么禁止对数组进行赋值?如何解决呢
  • 在上面的第一个程序中,我在 main()和void*函数中的。我想我只需要放一次。那么我到底要把它放在哪里呢?在main()中还是在void*函数中
  • 是否必须在返回0之前将pthread\u join放入main()中
  • 先谢谢你。 你的解释将对我大有帮助

    谢谢

    附言:我在下面的部分中发布了另一个类似的问题(关于矩阵)。

    好吧

  • 在C语言中不允许直接复制数组。这已经解释得很清楚了
  • 明确说明了pthread_exit的确切功能;还提供了示例。也就是说,调用应该放在printNumber(void*x)中,而不是main()中
  • pthread_join的确切功能已明确说明。因此,要将控制传递给线程,需要pthread_join调用

  • 比如说:

    typedef struct {
        int startIdx;
        int *arrC, *arrA, *arrB;
    } someType;
    
    [...]
    
    x->arrA = arrayA
    [...]
    

    需要pthread_join,因为您希望在退出应用程序之前等待每个线程都完成。

    @Roney Michael:谢谢您的链接。看来我还没有学会基本的C编程101。我想对上面的两个答案进行升级,这对我很有帮助,但我仍然没有这样做的名声,我很抱歉。等我有了足够的声誉后,我会再投票决定Anthony Catel:在我看到你的答案之前,我正在考虑根据我找到的链接(computative.engineering.or.id/Matrix/Perkalian)中的一个示例更改我的结构,比如:typedef struct{int startIdx;int(*arrC)[SIZE],(*arrA)[SIZE],(*arrB SIZE];}someType;但你的建议似乎更容易理解。谢谢。@Anthony Catel:你的建议很有效。。。!!!非常感谢:D。我现在要用Pthread编写一个矩阵mult。OT:这里有
    ->
    操作符。@alk:我明白了。谢谢。编译器抱怨赋值运算符的右边不允许有数组。你想对每一行标记的代码做什么?还有,什么是
    someType
    ?@code Guru:那么赋值运算符的右侧允许做什么?Sometype是一个新类型,将转换为(void*)作为pthread_create的参数。实际上,我不确定我写的代码背后发生了什么(在内存堆栈中)。如果你愿意,请看我的下一篇文章(关于矩阵赋值的新问题)。
    ||In function `int main()':|
    \pth_array.c|58|error: ISO C++ forbids assignment of arrays|
    
    typedef struct {
        int startIdx;
        int *arrC, *arrA, *arrB;
    } someType;
    
    [...]
    
    x->arrA = arrayA
    [...]