ڣ2020-12-11
1
2 غ
3 ͵
ԭӲֻܶͱλбǣʵʵʹûôֻͱλôٽٸӣ豸ṹͲͱǶڽṹгԱIJҲҪ֤ԭԣ߳ A Խṹʹڼ䣬Ӧýֹ߳ʴ˽ṹЩԭӲʤΣҪҪƣ Linuxںо
Spin Lockһֵ͵ĶٽԴлʵֶΣԴĹʽΪ˻һijCPUеĴִһԭӲòԲãTest-And- SetijڴԭӲڸò֮ǰִеԪܷڴԽѾУִУԽԱռãһСѭظԲáνġͨ˵ǡԭشתijͨøñͷijȴġԲá߱ͷš
ķǰΪһñһٽΪҵǰУԵһᡱ߱ΪҵǰУԱʹáAִеԪȽ̣BִеԪͼͬһʱ֪ѱУȵAִеԪͷźܽ롣
Linux ںʹýṹ spinlock_t ʾṹ嶨ʾ

ʹ֮ǰ϶Ҫȶһ巽ʾ
spinlock_t lock; //
ԺͿʹӦ API

һʹã

ҪSMPCPUں˿ռڵCPUں˲֧ռϵͳ˻ΪղڵCPUں˿ռϵͳУڼں˵ռֹں˿ռĵCPUϵͳΪʵϺSMPϵͳˣĵCPUϵͳʹʮֱҪ⣬ڶSMP£κһõúϵռҲʱֹˣûнֹһ˵ռȡ
Ա֤ٽܱCPUͱCPUڵռ̴ţǵõĴִٽʱܵжϵӰ졣Ϊ˷ֹӰ죬Ҫõжһãغ£

̺жϿܷͬһƬٽԴһҪڽе spin_lock_irqsave/spin_unlock_irqrestoreжеspin_lock/spin_unlockʾCPU0ϣǽģжĻ˺CPU1ǽģжģͬһæȴһк˼䲢Ŀԡͬʱÿ˵Ľijʱõspin_lock_irqsaveԸúϵжDzܽģ˺ڲĿԡ

ʦӦʹʹлҪرע¼⡣
1ʵæʱCPUһֱѭִСԲáֱöȡøCPUڵȴʱκõĹǵȴˣֻռʱ伫̵£ʹǺġٽܴй豸ʱҪϳʱռʹήϵͳܡ
2ܵϵͳǵݹʹһһѾӵijCPUڶλCPU
3ڼ䲻ܵÿ̵ȵĺ̻֮copy_from_usercopy_to_userkmallocmsleepȺܵں˵ı
4ڵ±̵ʱҲӦΪԼCPUǶ˵ģرǿƽ̨ĸ磬ڵCPU£жϺͽܷ̿ͬһٽspin_lock_irqsaveǰȫģжʵspin_lockҲû⣬Ϊspin_lock_irqsaveԱ֤CPUжϷִСǣCPUɶˣspin_lock_irqsaveһ˵жϣһ˾Ϳɲ⡣ˣΣжϷҲӦõspin_lock
ĻϻضʹõЩʵõIJ࣬ Linux ںʹãǼ˽һЩ
1д
ٽڽʲôǶдһͬʡִеԪͬʱȡٽԴҲᱻסʵϣԹԴʱִеԪͬʱȡDzģдrwlockIJдһֱȸСƣˡĸд棬ֻ1д̣ڶ棬ͬʱжִеԪȻдҲͬʱС
Linux ںʹ rwlock_t ṹʾдṹ嶨£

дصAPI£


2˳
˳seqlockǶԶдһŻʹ˳ִеԪᱻдִеԪҲ˵ִеԪдִеԪԱ˳ĹԴдʱȻԼصȴдִеԪддִеԪҲҪȴжִеԪɶȥдǣдִеԪдִеԪ֮ȻǻģдִеԪڽддִеԪֱдִеԪͷ˳
˳ԣܶд֮䲻ų⣬ִеԪڶڼ䣬дִеԪѾдôִеԪ¶ȡݣԱȷõġԣ£˿ܷͬܶЧݡ
Linux ںʹ seqlock_t ṹʾ˳ṹ嶨£

˳API
