c - C中的线程管理

标签 c multithreading segmentation-fault

定义结构

typedef struct {
    int a,b;
}targ;

第一个线程函数:

void* sum(void *arg) {
    int *s;
    targ *p = (targ*)arg;

    int i=p->a;
    int j=p->b;
    *s=i+j;
    pthread_exit((void*)s);
}

第二个线程函数:

void* pdt(void *arg) {
    int *p;
    targ *s= (targ*)arg;

    int i=s->a;
    int j=s->b;
    *p=i*j;
     pthread_exit((void*)p);
 }

主线程函数:

 int main(void) {
     int ret1,ret2;
     pthread_t tid1,tid2;
     targ *x;

     x=(targ*)malloc(sizeof(targ));

     printf("enter the 2 numbers\n");
     scanf("%d%d",&x->a,&x->b);

     printf("%d%d",x->a,x->b);

     pthread_create(&tid1,NULL,sum,(void*)x);
     pthread_create(&tid2,NULL,pdt,(void*)x);

     pthread_join(tid1,(void**)&ret1);
     pthread_join(tid2,(void**)&ret2);

     printf("the sum and product of the 2 numbers is %d and %d\n",(int)ret1,    (int)ret2);

     return 0;
 }

尽管我已按照每个 API 的手册页面进行操作,但我无法理解为什么会出现段错误

该程序旨在了解线程函数如何相互协作。主函数将值传递给每个线程函数,然后它们将值返回给主函数。

最佳答案

您尚未为 s 和 p 指针变量分配内存。所以发生了段错误。 您应该分配内存或仅使用地址。

关于c - C中的线程管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457002/

相关文章:

c++ - 程序如何成为一个过程。操作系统如何使程序成为一个进程

c - 使用 ioctl 与读取时的 PCIe 总线延迟?

Java 在不调试或打印时卡住

multithreading - 线程上下文切换 Vs.进程上下文切换

c - 从 C 语言的文本文件中读取 IP 地址

c - 使用 ZwQuerySystemInformation 获取 SystemKernelDebuggerInformation

在C99模式下给出编译错误的代码

android - 处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

C++ STL 队列、引用和段错误

c - 在 C 语言中使用 GEOS API 函数返回段错误