0

직렬 프로토콜 스택의 경우 serial에서 읽고 쓰는 스레드와 쓰기 전용 스레드를 구현할 것입니다. 한번 열고 두 스레드에서 파일 기술자를 사용하는 것이 안전한지open() 다중 스레드 컨텍스트에서 읽기 및 쓰기를 위해 직렬 장치를 두 번 사용합니다.

이 궁금하거나이 같은 두 번 열고하는 것이 좋습니다 :

tx_fd = open("/dev/ttyS0", O_WRONLY); 
rx_fd = open("/dev/ttyS0", O_RDONLY); 

또는 어쩌면 내가해야 할 다른 패러다임을 사용해야합니다 단일 스레드의 모든 것.

함정은 무엇입니까?

+2

두 가지 모두 작동해야합니다. 많은 차이가 있다고 생각하지 않습니다. 두 번 열면 어떤 스레드가 그것을 닫을지를 조정할 필요가 없다는 것을 의미합니다. – Barmar

+0

@Barmar * 어느 쪽이든 작동해야합니다. * 유명한 마지막 단어 ... ;-) –

+1

COM 포트를 사용하면 두 번 열어 볼 수 없습니다. 정말 조심하세요. 별도의 쓰레드로 쓰려면 해당 쓰레드에만 쓰십시오. 읽기 스레드 또는 다른 스레드가 버퍼링 된 내용을 보내려면 버퍼를 단일 쓰기 스레드에 대기열에 넣으십시오. –

답변

0

"함정"이 있습니다. 단일 쓰레드 접근 방식에서는 쓰는 동안 읽을 수 있지만 응답 시간에 약간의 지연이있을 수 있지만 코드는 일반적으로 더 간단합니다. 멀티 스레드 구성에서는 하나 이상의 스레드에서 진행하면서 다른 스레드는 차단되고 일반적으로 최신 시스템을보다 효율적으로 활용할 수 있지만 스레드간에 데이터를 공유해야하거나 작업간에 동기화/조정이 필요한 경우에는 다음 중 하나 이상을 사용해야합니다. 파이프, 대기열, 자물쇠, 세마포어, 메모리 펜스 등이 있습니다.