멀티 쓰레드 프로그래밍에 익숙하다. 누구든지 나를 도와 줄 수 있는지 궁금하다.멀티 쓰레드 프로그램을 사용하여 시리얼 메시지를 수신하고 구성하기 (C++)
직렬 (연속) 비동기 메시지를 수신 한 프로그램을 만들어이 메시지를 읽고 구성해야합니다.
멀티 스레드 기술을 사용하려고합니다 : 첫 번째 스레드는 시리얼 정보를 받아 행렬 (RxTh [col] [row])에 한 줄에 줄을 써야합니다. 그런 다음 두 번째 스레드가 호출되어 RxTh 행렬의 각 행을 읽고 특정 문자 ('begin line'msg를 상징 함)를 검색합니다. 또한이 스레드는이 수신 메시지를 다른 행렬 (Msg [col2] [row2])에 넣어야합니다.이 행은 msg의 각 행을 새 행렬의 다른 행으로 구분합니다.
앞으로이 재배치 된 선을 사용하여 구체적인 정보를 검색해야하지만이 부분에서는 지금 생각하지 않습니다.
그래서,이 프로그램에 몇 가지 문제가 있습니다 :
첫째, 내가 읽기 부분을 시작 작성 중지 때 직렬 메시지의 일부 조각을 잃고있다. 그래서 뮤텍스 또는 중요한 섹션을 사용하려고했습니다. 그러나 그것은 작동하지 않으며, 나는 왜 그런지 모른다.
두 번째 문제는 두 번째 행렬 (Msg [] [])이 일부 줄의 중간에 '0'의 이상한 시퀀스를 가지고 있으며이 스레드가 시작될 때이 '0'이 나타나는 것으로 의심됩니다. RxTh 행렬의 새로운 행을 읽는다. 어떤 의미가 있습니까?
뮤텍스를 사용할 때 한 번에 한 행만 잠글 수 있습니까?
누군가가 나를 도울 수 있다면, 나는 많이 감사 할 것입니다 !!
자세한 정보가 필요하거나 코드 조각이 필요한 경우 나에게 물어보십시오.
감사합니다.
답변을 주셔서 감사합니다. 그러나 저는 아직 몇 가지 질문이 있습니다 ... 중요한 섹션에 의해 보호되는 FIFO 큐를 만드는 방법을 모르겠습니다. 아이디어를 얻을 수 있도록 몇 가지 예제 코드를 보여줄 수 있습니까? 감사합니다. – NatCruella
@NatCruella 그것은 단지 목록 일뿐입니다. 순서를 지키는 어떤 명부든지 할 것이다. FIFO는 새로운 항목을 마지막에 넣고 처음부터 가져 오는 것을 의미합니다 (또는 잘못된 경우 선택 사항입니다). –
"중요한 부분에 의해 지키기"는 또한 프로그래머가 사용하는 방법 일뿐입니다. 이는 단순히 스레드가 임계 영역 (또는 뮤텍스 또는 세마포어 또는 원하는 모든 스레드 동기화)을 획득하여 대기열에 액세스해야 함을 의미합니다. 큐에 액세스하는 모든 코드에서 중요한 시그니처가 이전에 획득되고 릴리스 된 것임을 간단하게 확인할 수 있습니다. 또는 큐와 critsection을 전용 멤버로 캡슐화하는 개체를 만듭니다. 유일하게 노출 된 public 메서드는 Add() 및 Remove()이며, 이러한 메서드에서 중점을 가져오고 목록에 액세스하고 critsection을 릴리스합니다. –