线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁
1.互斥锁
用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线程都要使用互斥锁互斥访问任务队列,以避免多个线程同时访问任务队列以发生错乱。
在某一时刻,只有一个线程可以获取互斥锁,在释放互斥锁之前其他线程都不能获取该互斥锁。如果其他线程想要获取这个互斥锁,那么这个线程只能以阻塞方式进行等待。
头文件:
类型:pthread_mutex_t
2.条件锁
条件锁就是所谓的条件变量,某一个线程因为某个条件为满足时可以使用条件变量使改程序处于阻塞状态。一旦条件满足以“信号量”的方式唤醒一个因为该条件而被阻塞的线程。最为常见就是在线程池中,起初没有任务时任务队列为空,此时线程池中的线程因为“任务队列为空”这个条件处于阻塞状态。一旦有任务进来,就会以信号量的方式唤醒一个线程来处理这个任务。这个过程中就使用到了条件变量pthread_cond_t。
头文件:
类型:pthread_cond_t
3.读写锁
进程A使用某资源的同时,进程B只需要读该资源,而不修改。有了读写锁,就会提高此类情况下的资源利用率。
4.自旋锁
进程A使用了某资源,但在进程A中调用了进程B,而进程B也需要用该资源。自旋锁就是解决该问题的。
5.递归锁
某程序A反复递归调用,使用某资源,可根据递归的层数进行加锁。