os是多任务操作系统,同一个进程下面是可以有多个线程(进程)同时运行的,线程实际也是一个进程,只是对父进程的一个copy,与父进程共享地址空间进程,所以对同一进程共享的资源需要进行同步,同步的方法包括mutex semaphore spinlock 条件变量
很多东西如果只停留在概念层面远远是不够的,我们还是要不断的思考下面的实现机制和原理,下面说下同步的东西。
semaphore
|
|
锁的实现原理其实就是通过上面一个结构实现的,通过对counter这个值的变化来实现锁的拥有和释放。上面的结构体的字段的意思言简意赅。
信号量是可以用在进程间和同一进程的线程间的.
|
|
example:
|
|
mutex
互斥量实际是counter初始值为1的信号量,只是我们通常用于线程间来通信。互斥锁可以分为递归和非递归锁,同样可以为这mutex设置多种类型,下面有说明。
|
|
|
|