小编Rah*_*mar的帖子

pthread程序的臭名昭着的行为

我是编程新手,刚开始在c语言中使用pthread.我对多线程的性能提升程度感到好奇.为了测试这个,我写了一个简单的程序来计算n位数的总和(老实说,从youtube视频中获取它).我给了它一些真正的大数字来获得执行时间的一些值.

#include<stdio.h>
#include<pthread.h>
long long sum=0,pod=1;
void* sum_run(void* arg)
{
    long long *var_ptr=(long long *)arg;
    long long i,var=*var_ptr;
    for(i=0;i<=var;i++)
    {
        sum+=i;
    }
    pthread_exit(0);
}

void* sum_run2(void* arg)
{
    long long *var_ptr2=(long long *)arg;
    long long j,var2=*var_ptr2;
    for(j=0;j<=var2;j++)
    {
        pod+=j;
    }
    pthread_exit(0);
}

int main(void)
{
    printf("wait getting it...\n");
    long long val=999999999,val2=899999999;
    pthread_t tid[1];
    pthread_create(&tid[0],NULL,sum_run,&val);
    pthread_create(&tid[1],NULL,sum_run2,&val2);
    pthread_join(tid[0],NULL);
    pthread_join(tid[1],NULL);
    printf("sum1 is %lld sum2 is %lld",sum,pod);
}
Run Code Online (Sandbox Code Playgroud)

是的,我错误地将第二个长长的可变吊舱启动到1,这给了我错误的结果(即比期望的多1个).所以,我纠正了我的错误并使pod = 0,并且在更改它之后出现问题我的程序的执行时间增加到比没有使用pthread执行相同任务的程序大两倍甚至更大.我想不出里面发生了什么.请帮助该计划.

pod = 1 exec.time = ~2.8secs

pod = 0 exec.time = ~11.4secs

当sum …

c multithreading pthreads

2
推荐指数
1
解决办法
130
查看次数

如何直接分配在结构中声明的整数数组?

struct data
{
    char name;
    int conn[3];
};

typedef struct data unit;
typedef unit *link;

int main()
{
    int i;
    link p[100];
    for(i=0;i<=100;i++)
    {
        p[i]=(link)malloc(sizeof(unit));
        p[i]->name='h';
        p[i]->conn[]=(int*){"1","1","1"};   **// assignment error**
    }
    for(i=0;i<=100;i++)
    {
        printf("%c\t%d\t%d\t%d\n",p[i]->name,p[i]->conn[0],p[i]->conn[1],p[i]->conn[2]); 
    }
    getch();
}
Run Code Online (Sandbox Code Playgroud)

由于结构不支持初始化,所以有没有办法在不使用mem分配函数的情况下在一行代码中分配在结构内声明的这种类型的数组,为了简单起见?请坚持代码.

c arrays structure initialization

0
推荐指数
1
解决办法
60
查看次数

标签 统计

c ×2

arrays ×1

initialization ×1

multithreading ×1

pthreads ×1

structure ×1