可能会考:1.进程和线程的区别(空间)
2 线程优点(通信,“节俭”)
学习这篇文章中有关线程的相关知识。
链接: Linux多线程编程初探 - 峰子_仰望阳光 - 博客园.
线程的创建
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
// 返回:若成功返回0,否则返回错误编号
参数1:线程id
参数2:线程属性 (null) 参数3:调用相关函数(函数指针)
参数4:给线程传参的参数
注意:参数3和4是配合使用的
pthread_t pthread_self(void);(类似pid)
// 返回:调用线程的ID
下面运行小段代码
void*fund(void*arg){
printf("ti pthread create success!!!\n");
printf("t1 id is= %ld\n",(unsigned long)pthread_self());
printf("arg is =%d\n",*((int*)arg));
}
int main(){
int ret;
pthread_t t1;
int arg=100;
//pthread_t pthread_self(void);
ret=pthread_create(&t1,NULL,fund,(void*)&arg);
if(ret==0){
printf("pthread create success!!!\n");
}
printf("main id is = %ld \n",(unsigned long)pthread_self());
while(1);
运行结果为 gcc demo1.c -pthread
CLC@Embed_Learn:~/thread$ gcc demo1.c -pthread
CLC@Embed_Learn:~/thread$ ./a.out
pthread create success!!!
main id is = 140354439034624
ti pthread create success!!!
t1 id is= 140354430756608
arg is =100
如果while(1)没有的情况下,必须来调用 线程等待:调用该个函数的线程将阻塞,第一个参数为线程t1的id号 第二个参数 1.NULL (不需要获取t1线程中的数据) 2.(void**)ter 将t1中的数据给ter 此时必使用退出线程来退出t1线程 pthread_exit(void *rval_ptr); 参数:将线程里面的数据带出去,给等待函数
既可以传整数,也可以传字符串,但是如果传多个数据,就必须参数改为结构体
以下是传的整数
void*fund(void*arg){
static int data=666;
pthread_exit((void *)&data);
}
int*ter=NULL;
pthread_join(t1, (void **)&ter);
printf("tet data is =%d\n",*ter);