thread관련질문 계속입니다.

shjoung의 이미지

먼저 질문했을때 thread를 하드웨어 제어하기 위해서 사용한다고 했는데...
어제의 문제는 좀 다른 부분이네요.
어제 짰던 프로그램을 아침에 와서 돌려 보니까
심각한 문제가 있는듯 하네요.

프로그램을 간략하게 아래와 같이 정리해 보았습니다.

int working = 0;

void drawtoX(void){
  window에 그림을 그리는 가상의 함수번
}

int draw(void){
  if(working) return 0;
  else 
  {
  working=1;
  drawtoX();
  working=0;
  }
}

int main(void) {  

int res;
pthread_t a_thread;

res = pthread_create(&a_thread, NULL, thread_function, NULL);
if(res != 0){
  perror("Thread creation failed");
  exit(EXIT_FAILURE);
}

while(1) draw();

}

void *thread_function(void *arg){
  while(1) draw();
}

프로그램 실행시키면 윈도우가 뜨고,
잠시후에 죽으면서 다음과 같은 메세지를 남기네요.
참. 원하는 그림은 잠시 표시

Success
X Error of failed request: BadAccess (attempt to access private resource denied)
Major opcode of failed request: 144 (GLX)
Minor opcode of failed request: 5 (X_GLXMakeCurrent)
Serial number of failed request: 7595
Current serial number in output stream: 7597됩니다.

상황을 좀 더 자세히 알려드려야 겠지만,
잠히는 상황 있으면 도움 주시기 바랍니다.
매번 도움주시는 분들께 감사드립니다.

alsong의 이미지

if(working) return 0; pthread_mutex_lock을 사용하세요. 위 루틴은 working을 체크후 task switching이 발생하면 draw가 동시에 실행 될 가능성이 있습니다.

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.