Re: [問題] synchronized(lock){lock.wait()}
※ 引述《allstarschh (allstars)》之銘言:
: //Thread A
: synchronized(lock){
: lock.wait();
: }
: //Thread B
: synchronized(lock){
: lock.notify();
: }
: 想請問 Thread A先跑 所以先call lock.wait()
: 後來Thread B跑
: 我想請問 B能夠進到synchronized裡嗎?
: 寫了程式測一下 似乎是可以的
: 也看過一些synchronized 是這樣寫的
: 請問這樣寫的話是正確的嗎
: 會不會有哪些side effect
: 另外 如果這樣是ok 的
: 那也就是說Thread A在wait時release了lock
: 但在Thread B notify時 會把A wake up
: 但此時B已經進到synchronized裡面
: 那這時lock是A 還B hold 的呢???
我之前有貼過一篇文章講 wait & notify 的
大概而言會是這樣:
A 取得 lock 的 mutex (當成是 mutex 想吧)
B 企圖想acquire lock, 但被 A acquire 了所以 B 會等
然後 A 到 wait 的時候會把 lock release 和等待 notify
因為 A release lock 所以 B 會拿到 lock
B invoke notify
A 會醒來, 並企圖取 lock, 但由於被 B 拿著所以 A 會等
B 離開 synchronized block, 所以把 lock release
A 會取得 lock 的 mutex 然後繼續之後的工作, 直到離開 synchronized block
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
※ 編輯: adrianshum 來自: 202.22.246.26 (10/09 19:40)
推
10/09 20:43, , 1F
10/09 20:43, 1F
→
10/09 20:43, , 2F
10/09 20:43, 2F
推
10/09 23:54, , 3F
10/09 23:54, 3F
討論串 (同標題文章)