先沾代码,没时间了,抽时间把理论补上。
源代码如下:
#include <stdio.h>
#include <pthread.h>
/* 定义线程要执行的函数,p_arg为接收线程传递过来的数据 */
void *Thread1_fuc(void *p_arg)
{
printf("我线程1在执行找豆豆操作\n");
return "我线程1执行成功了哦\n";
}
void *Thread2_fuc(void *p_arg)
{
printf("我线程2在执行打豆豆操作\n");
return "我线程2执行成功了哦\n";
}
int main()
{
int res = 0;
pthread_t mythread1,mythread2;
void *p_thread_result = NULL;
/* 1.创建一个线程,
&mythread1:要创建的线程
NULL:不修改新建线程的任何属性
ThreadFun:新建的线程要执行的动作
NULL:不传递给ThreadFun()函数任何参数
res:返回值,res为0表示创建线程成功了,否则代表创建失败
*/
res = pthread_create(&mythread1, NULL, Thread1_fuc, NULL);
if (0 != res)
{
printf("创建线程1失败\n");
return 0;
}
res = pthread_create(&mythread2, NULL, Thread2_fuc, NULL);
if (0 != res)
{
printf("创建线程2失败\n");
return 0;
}
/* 2.等待指定线程执行完毕
mythread:指定等待的线程;
&p_thread_result:接收ThreadFun()函数的返回值,
或者接收pthread_exit()函数指定的值
返回值res为0表示函数执行成功,反之则执行失败
*/
res = pthread_join(mythread1, &p_thread_result);
//输出线程执行完毕后返回的数据
printf("%s\n", (char*)p_thread_result);
res = pthread_join(mythread2, &p_thread_result);
//输出线程执行完毕后返回的数据
printf("%s\n", (char*)p_thread_result);
printf("主线程执行结束\n");
return 0;
}
/*
注意:
1. 编译命令:gcc c_thread_1.c -o hello -lpthread (命令中要加-plthread参数,否则会导致程序连接失败)
编译程序包括 预编译, 编译,汇编,链接,包含头文件了,仅能说明有了线程函数的声明, 但是还没有实现,
加上-lpthread是在链接阶段,链接这个库。用-phtread也行,并且建议,向后兼容。
*/