diff --git a/thread/thread.c b/thread/thread.c
new file mode 100644
index 0000000000000000000000000000000000000000..0908dd48e68b39adcd35454370b22d8b4a916cbf
--- /dev/null
+++ b/thread/thread.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+
+void* sth_1(void * args){
+
+    int result = 0; 
+    short * p = (short *)args;
+    
+    for(int i =0 ; i<30; i++) result += *(p+i);
+
+    printf("\n\nSum of scores : %d\n", result);
+
+    printf("\nAverage of scores : %.2f\n", result/30.0f);
+
+    printf("\n---------------- thread_1 terminated ----------------\n");
+    
+    pthread_exit(NULL);
+}
+
+void* sth_2(void * args){
+
+    short * p = (short *)args;
+
+    for(int i = 0; i< 30 ; i++)
+        for(int j = 0 ; j< 29-i ; j++){
+
+            if(*(p+j) < *(p+j+1)) {
+
+                short tmp = *(p+j);
+                *(p+j) = *(p+j+1);
+                *(p+j+1) = tmp;
+            }
+        }
+
+    printf("\n\n---------------- Score list by desc ----------------\n\n");
+    for(int n = 0; n <30 ; n++) printf("%hd :%hd \n",(n+1),*(p+n));
+
+        
+
+    printf("\n---------------- thread_2 terminated ----------------\n");
+     pthread_exit(NULL);
+}
+
+
+int main() {
+
+    short scores[30];
+    pthread_t th1, th2;
+
+    printf("******* Enter Scores ******\n"); 
+    for(int i = 0; i< 30 ; i++) scanf("%hd", &scores[i]);
+
+    printf("You Entered: ");
+    for(int i = 0; i< 30 ; i++) printf("%d ", scores[i]);
+
+    pthread_create(&th1, NULL, sth_1, (void *)scores);
+
+    pthread_create(&th2, NULL, sth_2, (void *)scores);
+
+    pthread_join(th1, NULL);
+    pthread_join(th2, NULL);    
+
+    printf("\n---------------- main thread terminated ----------------\n");
+
+    pthread_exit(NULL); 
+
+}
\ No newline at end of file
diff --git a/thread/thread.md b/thread/thread.md
new file mode 100644
index 0000000000000000000000000000000000000000..3ba845f936aee8171da48b783cecef2f26a299f4
--- /dev/null
+++ b/thread/thread.md
@@ -0,0 +1,49 @@
+# thread
+
+## 1. discription
+
+Input: 사용자로부터 short형 정수 30개를 입력 받는다.
+
+main function:
+
+Thread를 2개 생성하고 thread가 종료될 때까지 기다린다. 
+
+Thread sth_1 : 
+
+전달받은 void 형 포인터를 short형 포인터로 변환한 후
+
+포인터가 가리키는 배열의 모든 element의 총합과
+
+이를 평균을 낸 결과를 출력한다.
+
+Thread sth_2 :
+
+전달받은 void 형 포인터를 short형 포인터로 변환한 후
+
+bubble_sort를 통해 포인터가 가리키는 배열의 모든 element를 내림차순 정렬한 후 출력한다.
+
+
+## 2. result
+
+
+[사진1]
+<br>
+pthread.h를 사용하기 위해서
+gcc 컴파일시 -lpthread 링크 설정을 해주어야한다. 
+
+[사진2]
+<br>
+1부터 30까지 입력을 하였고,
+
+입력이 제대로 이뤄졌는지 확인하기 위해 입력한 배열을 다시 출력하였고, 정상적으로 입력이 완료되었음을 확인할 수 있다.
+
+sth_1(첫번째 thread)은  입력값의 총합과 평균을 출력하고,
+
+[사진3]
+<br>
+
+sth_2(두번째 thread)는 입력값을 높은 값부터 차례대로 내림차순 정렬하여 출력했다.
+
+마지막으로, pthread_join을 이용하여 main thread는 child thread들이 종료될 때까지 기다리도록하게 했다.
+
+따라서 thread의 종료 순서는 sth_1 -> sth_2 -> main thread 순이 되었다.
\ No newline at end of file