OS

[운영체제] 11. Concurrency, Concepts, and Case Studies

김치말이삼겹살 2024. 3. 28. 16:00
  1. Thread Creation
    #include <pthread.h>
    
    int
    pthread_create(pthread_t* thread,
    								const pthread_attr_t* attr,
    								void* (*start_routine)(void*),
    								void* arg);​
    1. ‘thread’: 상호작용할 thread 명시
    2. ‘attr’: thread의 속성 명시
    3. ‘start_routine’: thread가 시작할 함수
    4. ‘arg’: 함수의 인자
      int
      pthread_create(..., //first two args are the same
      										void* (*start_routine) (int),
      										int arg);
      
      
      int
      pthread_create(..., //first two args are the same
      										int* (*start_routine) (void*),
      										void* arg);​
  2.  
  3. Wait for a thread to complete
    int pthread_join(pthread_t thread, void **value_ptr);​
     
    1. ‘thread’ : 어떤 스레드한테 기다리라고 할지
    2. ‘valute_ptr’: return 값을 pointer에 담기→ 이경우를 대비하여 함수의 인자로 값을 받는다
      void *mythread(void *arg) {
      		int m = (int)arg;
      		printf("%d \n",m);
      		return (void*) (arg + 1);
      }
      
      int main(int argc, char *argv[]) {
      		pthread_t p;
      		int rc, m;
      		pthread_create(&p, NULL, mythread, (void *) 100);
      		pthread_join(pm (void **) &m);
      		printf("returned %d\n", m);
      		return 0;
      }​
    3. → thread의 return value가 time slice를 지나 자원 회수가 되면서 de-allocate될 수 있음

 

 

 

 

반응형