linux 创建线程函数吗,Linux多线程——线程创建

  • Post author:
  • Post category:linux


线程pthread_create创建线程函数。函数声明:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *pth_attr,void*(*start_rtn)(void*),void *arg);

返回值:若成功则返回0,否则返回出错编号.

参数说明:

tid:指向所创建的线程ID的指针。

pth_attr:用于设置线程属性,通常为空。

start_rtn:线程运行函数的地址,函数指针类型。

arg:传给线程的参数,运行函数的参数,即传给start_rtn的参数。

样例:创建线程,在线程中进行运行大数乘法。使用code::blocks,Ubantu 18.04注意:编译程序需要使用pthread库(pthread库不是默认库),在编译时加上-lpthread(在终端下)或者在code::blocks里选择Project -> Build options -> Linker settings -> Link libraries 里加上-pthread以避免出现错误undefined reference to ‘pthread_create’。

4766194d089dda4a6bd78239bd23ff88.png
添加pthread库支持

#include

#include

#include

#include

#include

void *create(void *message){

int num_1[5]={1,2,3,4,5},num_2[5]={6,7,8,9,9};

int size=10;

int result[size]={0};

int i=0;

for(i=0;i<5;i++){

int k=i;

for(int j=0;j<5;j++)

result[k++]+=num_1[i]*num_2[j];

}

for(i=0;i

if(result[i]>=10){

result[i+1]+=result[i]/10;

result[i]%=10;

}

}

printf(“multiply end:result->\n”);

for(int n=10;n>0;n–)

printf(“%d”,result[n-1]);

getchar();

return (void*)result;

}

int main(int argc,char*argv[]){

pthread_t threadId;

int error;

int num[10]={0};

error=pthread_create(&threadId,NULL,create,(void*)num);

if(error!=0){

printf(“thread create error\n”);

return -1;

}

pthread_join(threadId,NULL);

return 0;

}

运行结果:54321*99876->5425364196

a1cbc99d89961a4585d3371369fbf9cf.png
相乘结果:5425364196

调试:

ac5f00fdabba14281675c0fe38d495c1.png
调试变量监测:相乘结果result数组

在调试时出现warning: GDB: Failed to set controlling terminal: Operation not permitted

可以不用管,要看哪步的结果添加断点即可。

66274bf9f0e0f774e5efd15cf52ec878.png
线程相关概念

基本概念 线程创建 线程挂起 线程终止 互斥和同步

举报/反馈