2017-10-21 5 views
0

이것은 간단한 작업 인 것처럼 보이지만 작동하지 않습니다. 내 스레드 함수는 루프에서 실행되며 배열에 항상 데이터를 씁니다. 하지만 때로는이 데이터를 주요 기능에서 읽고 싶습니다. 따라서 read-funtion은 이상적으로 스레드를 일시 중지하고 데이터를 읽은 다음 스레드를 다시 시작해야합니다. 그러나 읽은 값이 정확하지 않고 손상된 것으로 보입니다. 아마 뭔가 문제가있다 :pthread 읽기/쓰기 동기화

스레드 FCT :

void threadfct() 
{ 
    while (1) 
    { 
     pthread_mutex_lock(&mutex); 
     data = write_data(); 
     pthread_mutex_unlock(&mutex); 
    } 
} 

기능 스레드 기능에 의해 작성되는 데이터를 읽어야 메인 루프에서 호출됩니다

void read_data() 
{ 
    printf("Daten: %f\n", data[0]); 
} 
+1

더 많은 문맥을 표시해야합니다. 먼저 뮤텍스를 획득하지 않고 데이터를 읽으십니까? –

+0

std :: thread를 사용하십시오. –

+0

@FlorianWeimer가 암시하는 바는 양쪽 스레드가 임계 영역에 들어가기 전에 뮤텍스를 사용하려고 할 때만 뮤텍스가 작동한다는 것입니다. – CplusPuzzle

답변

0

시도 이 변경 사항 :

void read_data() 
{ 
    pthread_mutex_lock(&mutex); 
    printf("Daten: %f\n", data[0]); 
    pthread_mutex_unlock(&mutex); 
} 
+0

나는 그랬지만 내 프로그램의 실행을 막는 것 같습니다. – Lemonbonbon

+0

@ Lemonbonbon 그러면 다른 뮤텍스를 잠 갔는가? –

+1

프로그램에 대한 내용, 스레드 작성 방법,보고 싶은 내용 및 실제로 보는 내용을 알려주십시오. – CplusPuzzle