我在閱讀「Linux設備驅動程序第3版」,關於併發性和競爭條件的章節。有一個我不完全明白的例子。他們正在討論內核編程中的一種常見模式,當需要在當前線程之外啓動活動(例如,新的內核線程或用戶進程,請求現有進程或基於硬件的操作)時,請等待該活動完成。不是非常有效的解決方案的例子是:Linux內核互斥體
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
然後,他們認爲外部任務調用(& SEM)時,它的工作就完成了。
我不明白爲什麼我們不能這樣來做:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
爲什麼是必要的鎖定狀態,以創建互斥量,然後獲得任務之後互斥體已經開始了嗎?
期待您的迴音!謝謝。
+1,但我認爲使用術語`semaphore`而不是`mutex`會更好。 SEMAPHORE:可以通過任何線程上/下。 MUTEX:擁有所有權,只有鎖擁有者線程可以啓用互斥鎖。在這種情況下,我們需要使用信號量,因爲它的目的是線程之間的通信... – Vojta 2011-01-21 11:06:39