Próbuję utworzyć wspólną pamięć, która będzie używana przez wiele procesów. te procesy komunikowania się ze sobą za pomocą połączeń MPI
(MPI_Send
, MPI_Recv
).Nazwany semafor lub stado, które jest lepsze C linux
Potrzebuję mechanizmu kontrolującego dostęp do tej współużytkowanej pamięci Dodałem wczoraj pytanie, aby sprawdzić, czy MPI zapewnia jakiekolwiek narzędzie do tego. Shared memory access control mechanism for processes created by MPI, ale wydaje się, że nie ma takiego przepisu przez MPI.
Muszę wybrać między named semaphore
lub flock
.
Dla nazwanego semafora, jeśli jakikolwiek proces zginie nagle, bez wywoływania sem_cloe()
, ten semafor zawsze pozostaje i można go zobaczyć przez ll /dev/shm/
. Powoduje to czasem zakleszczenie (jeśli ponownie uruchomię ten sam kod!), Z tego powodu obecnie myślę o używaniu stada.
Chciałbym tylko sprawdzić, czy najlepiej nadaje się do tego rodzaju operacji flock
?
Czy są jakieś wady korzystania z flock
?
Czy jest coś jeszcze oprócz named semaphore
i flock
, których można tu użyć?
Pracuję nad C pod Linuksem.
+1, ale chciałbym tylko dodać, że "stado" i podobne mechanizmy z pewnością nie są dobrym wyborem. Zostały one zaprojektowane w celu ochrony równoczesnego korzystania z plików i do niczego innego. W szczególności, jeśli nic nie dzieje się w pliku, nie jest on określony, gdy metadane pliku (takie jak zamki) są widoczne dla innych procesów. Po prostu nie używaj tego do celów, do których nie był przeznaczony. –