线程的基础知识
1. 线程的定义:一个进程内部的控制序列。
2. 线程的优点:
-
异步执行代码;
-
将用户交互和其他部分分开;
-
串行变并行。
3. 线程的缺点:
-
难调试;
-
共享变量的问题。
4. 线程的结构
线程的ID,寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量,私有数据。
进程对他下面的所有线程共享了:可执行程序文本、程序的全局内存和堆内存(操作系统分配的)、栈以及文件描述符。
创建线程
1. 见下面的 pthread_create() 函数原型:
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void),
void *restrict arg);
参数解释:
tidp 创建后,返回的线程id指向此变量
attr 线程的属性,用NULL表示默认的属性
start_rtn 新创建的线程,从此函数开始运行
arg 为上面start_rtn函数的参数
2. 运行实例
在Linux环境下,用 gcc t.c -o t -lpthread 编译运行。
#include <stdio.h>
#include <string.h>
#include <pthread.h>
void printThreadInfo(const char *whichThread) {
printf("%s\n", whichThread);
printf("The Process ID is: %u \n" , (unsigned int)getpid() );
printf("The Thread ID is %u \n", (unsigned int)pthread_self() );
printf("\n");
}
void *thread_function() {
printThreadInfo("my thread");
}
int main() {
pthread_t new_thread_id;
int err = pthread_create(&new_thread_id, NULL, thread_function, NULL);
if(err == 0) {
printf("thread created successfully! \n" );
} else {
printf("%s\n",strerror(err));
}
sleep(1);
printThreadInfo("main thread");
return 0;
}