Thread
自旋鎖如何防止上下文切換?
我正在使用此程式碼來視覺化自旋鎖如何防止上下文切換:
pthread_spinlock_t lock; void pp() { pthread_spin_lock(&lock); char d = 'D'; while(1) write(1, &d, 1); } void ppp() { char a = 'C'; while(1) write(1, &a, 1); } int main() { pthread_t thread; pthread_t tthread; pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE); pthread_create(&thread, NULL, pp, NULL); pthread_create(&tthread, NULL, ppp, NULL); pthread_join(thread, NULL); pthread_join(tthread,NULL); }
問題是我希望它永遠不會切換到第二個執行緒,因為我永遠不會釋放在 pp() 中完成的鎖,並輸出
DDDDDDDDDDDD
……因為根據我的理解,它應該防止上下文切換。但是我得到的輸出是這樣的:DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC
…我們該如何解釋呢?我對自旋鎖的理解不正確嗎?
您需要嘗試在所有應該互斥的執行緒中獲取鎖:
void ppp() { pthread_spin_lock(&lock); char a = 'C'; while(1) write(1, &a, 1); }
鎖的存在不會阻止上下文切換,您可以通過讓執行緒嘗試獲取相同的鎖來阻止執行緒同時進行。無法獲得鎖的執行緒在獲得鎖之前會自旋。