Czytam "sterowniki urządzeń linuksowych 3rd edition", rozdział o współbieżności i warunkach wyścigu. Jest taki przykład, którego nie do końca rozumiem; Mówią o wspólnym schemacie programowania jądra, kiedy trzeba zainicjować działanie (np. rexample, nowy wątek jądra lub proces użytkownika, żądanie dla istniejącego procesu lub działania sprzętowego) poza bieżącym wątkiem, poczekać na działanie kompletny. Przykład nie jest bardzo skuteczne rozwiązanie:jądro Linux mutexes
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
Potem sugerują zadanie zewnętrznego, aby wywołać (& SEM), gdy jego praca jest wykonywana.
Nie rozumiem, dlaczego nie możemy zrobić to w ten sposób:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
Dlaczego konieczne jest stworzenie mutex w stanie zablokowanym, a następnie nabyć mutex po zadaniu został uruchomiony?
Czekamy na wiadomość od Ciebie! Dzięki.
+1, ale myślę, że lepiej byłoby użyć terminu 'semafor' zamiast' mutex'. SEMAPHORE: może być w górę/w dół przez dowolny wątek. MUTEX: ma prawo własności, tylko wątek właściciela blokady może wywołać mutex. W tym przypadku musimy użyć semafora, ponieważ jego celem jest komunikacja między wątkami ... – Vojta
@Vojita: Zgadzam się. Użyłem terminu mutex, ponieważ pytanie odnosi się do semafora jako muteksu. –