[問題] 請教一個spinlock的問題

看板LinuxDev作者 (PS)時間15年前 (2010/12/17 11:34), 編輯推噓3(3012)
留言15則, 4人參與, 最新討論串1/2 (看更多)
請問一下 spinlock屬於busy waiting的機制 在SMP系統下可以解決同步的問題 但是在單一CPU下 若使用multithread機制 當一個thread被另一個thread preemptive 而這個thread也純取shared data spinlock不是也可以解決這種同步的問題 可是我在書上還有google的結果 很多都說spinlock是用在SMP系統 請問是什麼原因呢 還是我理解錯誤 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.61.85

12/17 13:23, , 1F
個人認為有支援preemption的kernel,不論多少顆cpu,
12/17 13:23, 1F

12/17 13:23, , 2F
spinlock都還是有作用的~~
12/17 13:23, 2F

12/17 23:21, , 3F
問題本身很奇怪,spin_lock已經說明是busy waiting的機
12/17 23:21, 3F

12/17 23:22, , 4F
制,就是表明它要lock住目前的cpu的resource,不希望被
12/17 23:22, 4F

12/17 23:24, , 5F
打斷;你現在又用preemptive的方法去存取資料
12/17 23:24, 5F

12/17 23:25, , 6F
那用spin_lock的目的是為了? mutex_lock_interrput應該
12/17 23:25, 6F

12/17 23:26, , 7F
更符合這個要求
12/17 23:26, 7F

12/18 01:54, , 8F
spinlock的好處是可以用在中斷ISR裡,因為ISR不能休眠~~
12/18 01:54, 8F

12/18 12:56, , 9F
所以我問題就是在他保證不preemptive
12/18 12:56, 9F

12/18 12:57, , 10F
包含SMP與multithread
12/18 12:57, 10F

12/18 12:57, , 11F
那書上要特別強調用在SMP上
12/18 12:57, 11F

12/18 13:00, , 12F
因為在multithread他也可以保證preemptive
12/18 13:00, 12F

12/18 13:01, , 13F
應不用特強調是在SMP下吧
12/18 13:01, 13F

12/21 22:38, , 14F
在 lock 一個 spin_lock_t 時會將 prempt_count 加 1
12/21 22:38, 14F

12/21 22:41, , 15F
這種情況下,這個 thread 不會被 prempt
12/21 22:41, 15F
文章代碼(AID): #1D2jfMeN (LinuxDev)
文章代碼(AID): #1D2jfMeN (LinuxDev)