W wielowątkowym programie Linux używanym do komunikacji szeregowej, czy jest możliwe (i jakie byłoby najlepsze podejście), aby zakończyć blokowanie wywołania read() z innego wątku?Linux, anuluj blokowanie read()
Chciałbym, aby wszystko było jak najbardziej reaktywne i unikaj wykorzystania limitów czasu z wielokrotnym odpytywaniem.
Tłem tego pytania jest to, że próbuję utworzyć bibliotekę komunikacji szeregowej Scala dla systemu Linux przy użyciu JNI. Staram się, aby strona natywna była tak prosta, jak to tylko możliwe, zapewniając między innymi funkcję read() i close(). Po stronie Scala jeden wątek wywoływał funkcję read() i blokował do momentu udostępnienia danych z portu szeregowego. Jednak port szeregowy można zamknąć za pomocą innych środków, powodując wywołanie close(). Teraz, aby zwolnić zablokowany wątek, musiałbym jakoś anulować wywołanie systemowe.
Powiązane: https://stackoverflow.com/questions/384391/how-to-signal-select-to-return-immediately –