Co by się stało, gdyby zadzwonić pod numer read
(lub write
lub oba) w dwóch różnych wątkach, na tym samym deskryptorze pliku (pozwala nam to powiedzieć, że interesuje nas plik lokalny, a jest to plik deskryptor pliku gniazda), bez użycia jawnie mechanizmu synchronizacji?C odczyt i bezpieczeństwo wątków (linux)
Odczyt i zapis są syscall, więc na jednordzeniowym procesorze prawdopodobnie jest to pech, że dwa odczyty będą wykonywane "w tym samym czasie". Ale z wieloma rdzeniami ...
Co zrobi jądro Linux?
I bądźmy trochę bardziej ogólni: czy zachowanie jest zawsze takie samo dla innych jąder (np. BSD)?
Edycja: Zgodnie z close documentation, powinniśmy być pewni, że deskryptor pliku nie jest używany przez syscall w innym wątku. Tak więc szwy wymagałyby jawnej synchronizacji przed zamknięciem deskryptora pliku (a więc również wokół odczytu/zapisu, jeśli wątek, który może go wywoływać, nadal działa).
Nie można użyć mechanizmu synchronizacji; jądro już to robi dla ciebie. –
Mam na myśli, używając jawnie. Więc jądro wykonuje całą pracę według własnego, a czytanie/pisanie/wywoływanie obu na nich nie wymaga żadnej jawnej synchronizacji? –
O ile mi wiadomo, tak. Nie jestem ekspertem od jądra Linuksa, ale nie mogę sobie wyobrazić, że jest inaczej. Może przyjdzie ktoś z bardziej szczegółową wiedzą. –