线程
线程(英语:thread)是操作系统能够进行运算调度的最小单位。线程的创建和销毁都是通过操作系统来完成的。
编程模型
单进程单线程模型
通常编程时使用的是单进程单线程模型,程序在运行时通过操作系统创建一个进程,包含一个主线程,当主线程结束后进程结束,操作系统回收资源。
单进程多线程模型
单进程多线程编程是在程序中创建子线程实现,这时创建的线程称为子线程。程序在运行是通过操作系统创建一个进程,包含主线程,主线程会创建子线程来处理任务;但这时主线程结束进程结束,主线程可以通过等待子线程结束再结束主线程退出。
C语言中多线程
C语言中通过pthread库来进行多线程程序编写。
- pthread_t 声明一个线程ID
- pthread_create 使用线程ID创建一个线程含有四个参数 :线程ID(pthread_t)、线程属性(pthread_attr_t)、函数指针[void *(*)(void *)]、参数指针(void *)
1 |
|
多线程模型中存在的问题
多线程模型中,不同线程可以访问同一个变量,不同的线程独立执行,如果同时读写一个变量会造成数据错误,因此在多线程模型中需要加入锁来对变量的安全,通常称为线程安全,加的锁名为互斥锁(mutex)。
测试代码逻辑,拥有一个变量balance,两个操作,存、取,当创建1000个线程时同时运行这两个操作会造成最终balance变量不为0.
不加锁代码
1 |
|
加锁代码
1 |
|