当前位置:首页 » 编程软件 » 编译pthread

编译pthread

发布时间: 2022-07-29 23:41:59

linux多线程编译中为什么说pthread_create未定义

问题描述说的太简单了,完全无法回答嘛
至少把出错信息完整的帖一遍阿

循环接收有两种方法:多线程+同步接收 ; 单线程+异步接收

其实异步接收也不是单线程,只是需要你管理的线程只有一个而已

Ⅱ c++编译pthread程序命令行怎么写

shibixiao | 六级lpthread是表示要连接到pthread的库是这里省略的lib,你应该可以找到共享库libpthread.so的因为pthread编程用到的函数在pthread库里面,就像你使用pow等数学计算函数,需要用到math.h需要 -lm

Ⅲ 用命令mn查找线程函数pthread-creat,在编译此类程序时链接应写成什么

pthread_create未定义的问题已解决我现在的问题是什么是同步接收+多线程和问题描述说的太简单了,完全无法回答嘛 至少把出错信息完整的帖一遍阿 循环

Ⅳ linux系统下,c语言pthread多线程编程传参问题

3个线程使用的都是同一个info

代码 Info_t *info= (Info_t *)malloc(sizeof(Info_t));只创建了一个info

pthread_create(&threads[i],NULL,calMatrix,(void *)info); 三个线程使用的是同一个

我把你的代码改了下:

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

intmtc[3]={0};//resultmatrix

typedefstruct
{
intprank;
int*mta;
int*mtb;
}Info_t;

void*calMatrix(void*arg)
{
inti;
Info_t*info=(Info_t*)arg;
intprank=info->prank;
fprintf(stdout,"calMatrix:prankis%d ",prank);

for(i=0;i<3;i++)
mtc[prank]+=info->mta[i]*info->mtb[i];

returnNULL;
}

intmain(intargc,char**argv)
{
inti,j,k=0;
intmta[3][3];
intmtb[3]={1};
Info_t*info=(Info_t*)malloc(sizeof(Info_t)*3);

for(i=0;i<3;i++)
for(j=0;j<3;j++)
mta[i][j]=k++;
/*3threads*/
pthread_t*threads=(pthread_t*)malloc(sizeof(pthread_t)*3);
fprintf(stdout," ");fflush(stdout);
for(i=0;i<3;i++)
{
info[i].prank=i;
info[i].mta=mta[i];
info[i].mtb=mtb;
pthread_create(&threads[i],NULL,calMatrix,(void*)(&info[i]));
}
for(i=0;i<3;i++)
pthread_join(threads[i],NULL);

fprintf(stdout," ====thematrixresult==== ");
fflush(stdout);

for(i=0;i<3;i++)
{
fprintf(stdout,"mtc[%d]=%d ",i,mtc[i]);
fflush(stdout);
}
return0;
}

矩阵的计算我忘记了,你运行看看结果对不对

Ⅳ gcc 编译选项 -pthread -lpthread 异同

-pthread 比 -lpthread 多了一个宏定义 -D_REENTRANT

对于多线程程序来说这个宏非常重要,这个宏会让libc和一些其他库,自动选择线程安全的函数实现(很多函数有线程安全和不安全的2种实现版本)

所以建议使用-pthread 或者加上 -D_REENTRANT.

Ⅵ gcc编译线程程序,为什么要加-lpthread,头文件已经包含了<pthread.h>了啊

-lpthread是链接库,

<pthread.h>只有申明,实现部分都在库里面。

创建线程时一般是把函数的指针做参数,所以要加一个取地址符号。

ret=pthread_create(&id,NULL,(void *)&thread,NULL);

另外,建议要检查一下创建线程的返回值ret是否成功,防止影响后面的代码。

(6)编译pthread扩展阅读:

每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。

编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。

Ⅶ LINUX下多线程编译问题

你编译的时候有加多线程连接选项吗? 要加上 -lpthread 或者 -pthread (尽量选后者)
例如 gcc -pthread -o test main.cpp

另外你的线程创建的不对,函数指针不能强转类型(这里也不用转)
pthread_create(&procter_t,NULL,(void*)procter_f,NULL);
pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);

应该是
pthread_create(&procter_t,NULL,procter_f,NULL);
pthread_create(&consumer_t,NULL,consumer_f,NULL);

Ⅷ 一个做两个矩阵乘法的 pthread 程序,能通过编译,运行报“segmentation fault”。

void*func(void*arg)
{
inti,j,k;
thread_info_t*info;
i=info->i;
j=info->j;
C[i][j]=0;
for(k=0;k<16;k++)//k是a的列数,b的行数
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}


这个函数里的参数arg没有用到,你声明了一个指针info,没有初始化内容然后就直接使用了info->i,这样会出错

加一句info = (thread_info_t *)arg;

试试看

热点内容
金蝶软件服务器是电脑吗 发布:2025-02-08 04:27:06 浏览:972
linux如何搭建c编译环境 发布:2025-02-08 04:24:49 浏览:818
ps脚本批量处理切图 发布:2025-02-08 04:19:03 浏览:57
iisftp命令 发布:2025-02-08 04:04:39 浏览:455
安卓为什么软件老更新 发布:2025-02-08 03:53:40 浏览:735
算法实际应用 发布:2025-02-08 03:53:07 浏览:535
c语言加密文本 发布:2025-02-08 03:47:50 浏览:681
安卓打字键盘的声音在哪里调 发布:2025-02-08 03:42:27 浏览:32
c实现c编译器 发布:2025-02-08 03:42:26 浏览:661
爱猫编程 发布:2025-02-08 03:40:52 浏览:588