Linux中的线程
-
线程负责执行二进制指令,进程除了执行指令之外,内存、文件系统等等都要其来管理。
- 使用进程实现并行执行的问题有两个:第一,创建进程占用资源太多;第二,进程之间的通信需要数据在不同的内存空间传来传去,无法共享。
-
创建和运行一个普通线程:声明线程函数->>声明线程对象->>设置线程属性->>创建线程->>销毁线程属性->>等待线程结束->>主线程结束。
-
线程访问的数据分成三类:第一类是线程栈上的本地数据,比如函数执行过程中的局部变量,每个线程都有自己的栈空间,为了避免线程之间的栈空间踩踏,线程栈之间会有小块区域,用来隔离保护各自的栈空间;第二类数据就是在整个进程里共享的全局数据,例如全局变量,虽然在不同进程中是隔离的,但是在一个进程中是共享的;第三类数据就是线程私有数据。
- 共享的数据保护方式:Mutex(Mutual Exclusion,互斥),它的模式是在共享数据访问时,申请加把锁,谁先拿到锁,谁就拿到访问权限,其他的排队等候直到上一次的锁使用结束并释放。互斥锁需要和条件变量配合使用。