mirror of
https://github.com/CaiJimmy/hugo-theme-stack.git
synced 2025-04-28 19:43:31 +08:00
c++
This commit is contained in:
parent
530e4627d0
commit
360ad45ed0
@ -301,12 +301,32 @@ auto_ptr是C++98中引入的第一个智能指针,但是由于他的不安全
|
||||
|
||||
2)主线程还会给任务队列中添加任务,子线程负责从任务队列中取任务
|
||||
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
有一个很傻的问题:
|
||||
|
||||
问任务队列加了互斥锁,其他线程想访问时会被阻塞,你还是如何唤醒他们的?
|
||||
|
||||
> 答:这个其实不用唤醒,我们在使用互斥锁保护一段共享资源时,
|
||||
>
|
||||
> 访问前上锁,访问后解锁,
|
||||
>
|
||||
> 当我们某一个线程正在访问这个共享资源时上锁保护,其他的线程就会被排斥在外,
|
||||
>
|
||||
> 然后这些线程就会不断地尝试加锁,
|
||||
>
|
||||
> 当正在操作共享资源的这个线程解锁后,哪个线程先抢到,哪个线程就使用共享资源,
|
||||
>
|
||||
> 是不需要唤醒的.
|
||||
|
||||
- 总结一下,如何唤醒阻塞?
|
||||
|
||||
1)如果是互斥锁导致的阻塞,阻塞的时候就使用lock加锁,要唤醒的时候使用ulock解锁就行了.
|
||||
|
||||
2)如果是条件变量导致的阻塞,那么当你要阻塞的时候就是wait函数,如果你要唤醒一个那就是notify_one,如果要唤醒全部那就是notify_all
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user