This commit is contained in:
1AoB 2024-04-21 16:45:21 +08:00
parent 530e4627d0
commit 360ad45ed0

View File

@ -301,12 +301,32 @@ auto_ptr是C++98中引入的第一个智能指针但是由于他的不安全
2)主线程还会给任务队列中添加任务,子线程负责从任务队列中取任务 2)主线程还会给任务队列中添加任务,子线程负责从任务队列中取任务
![1713687466179](图片/1713687466179.png)
--- ---
有一个很傻的问题: 有一个很傻的问题:
问任务队列加了互斥锁,其他线程想访问时会被阻塞,你还是如何唤醒他们的?
> 答:这个其实不用唤醒,我们在使用互斥锁保护一段共享资源时,
>
> 访问前上锁,访问后解锁,
>
> 当我们某一个线程正在访问这个共享资源时上锁保护,其他的线程就会被排斥在外,
>
> 然后这些线程就会不断地尝试加锁,
>
> 当正在操作共享资源的这个线程解锁后,哪个线程先抢到,哪个线程就使用共享资源,
>
> 是不需要唤醒的.
- 总结一下,如何唤醒阻塞?
1)如果是互斥锁导致的阻塞,阻塞的时候就使用lock加锁,要唤醒的时候使用ulock解锁就行了.
2)如果是条件变量导致的阻塞,那么当你要阻塞的时候就是wait函数,如果你要唤醒一个那就是notify_one,如果要唤醒全部那就是notify_all