一、多线程
1、线程
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
2、多线程
2.1 安装pthread库
Ubuntu默认是没有pthread库的,需要安装。输入命令:
sudo apt-get install -y glibc-doc manpages-posix-dev
2.2 创建线程
2.2.1创建线程与终止示例
(1)创建线程函数
int pthread_create(
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void*),
void *arg
);
参数说明:
thread 指针指向新线程ID结构体;
attr 含有各种线程属性的属性对象;
start_routine 线程开始执行时调用的函数名;
arg 给start_routine函数提供参数,类型为void *.
返回值 成功返回0,否则返回错误码。
(2) 终止线程函数
void pthread_exit(void *retval);
retval是一个void类型的指针,可以将线程的返回值当作pthread_exit( )的参数传入。
在创建的线程的顶层执行return线程会隐式地调用pthread_exit( )。
(3)线程ID
线程ID可以看作为线程的句柄,用来引用一个线程。类型 “ pthread_t ” ,是一个结构体;
获取线程自身ID:
通过函数:my_tid = pthread_self( )
函数原型:pthread_t pthread_self(void);
比较线程ID是否相等:
pthread_equal( )函数
2.2.2 运行
(1)用makefile将.c编译后,输入命令以运行
./1.pthread_create_exit.out
(2)结果如下:
2.3 线程连接与分离
2.3.1 示例
(1)连接函数原型
int pthread_join(pthread_t thread, void**retavl);
(2)分离函数原型
int pthread_detach(pthread_t thread);
2.3.2 运行结果
2.4 线程初始化与销毁
示例
(1)初始化函数
int pthread_attr_init(pthread_attr_t *attr);
(2)销毁函数
int pthread_attr_destroy(pthread_attr_t *attr);
2.5 互斥锁 & 容量锁</