http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8598 [º¹»ç]
================================================
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 255 // 255°³ÀÇ ¾²·¹µå·Î ³ª´©¾î ó¸®
void* ping_ip(void* arg) {
int ip = *((int*)arg);
char str[100];
sprintf(str, "ping -c 1 -W 1 192.168.219.%d > /dev/null", ip);
if (system(str) == 0) {
printf("192.168.219.%d is alive\n", ip);
}
return NULL;
}
int main() {
pthread_t threads[NUM_THREADS];
int i;
int ip[NUM_THREADS];
for (i = 0; i < NUM_THREADS; i++) {
ip[i] = i; // °¢ ¾²·¹µå¿¡ ´Ù¸¥ IP ³Ñ°ÜÁÖ±â
pthread_create(&threads[i], NULL, ping_ip, &ip[i]);
}
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL); // ¾²·¹µå Á¾·á ´ë±â
}
return 0;
}
================================================
ÇØÄ¿½ºÄ𠸸ÈÀÇ ±¸Å¸°¡ ¸¸µç ÀÚµ¿À¸·Î ½ºÄµÇÏ´Â ÇÁ·Î±×·¥ÀÌ ³ª¿À´Âµ¥
°Å±â¿¡¼ "¾²·¹µå" °³³äÀ» ³Ö¾î¼ ÇÁ·Î±×·¥À» È®ÀåÇغôÙ.
¸ÖƼ ¾²·¹µùÀº ÇϳªÀÇ ÇÁ·Î¼¼½º ³»¿¡¼
¿©·¯ ¾²·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇµµ·Ï ÇÏ´Â ±â¹ýÀÌ´Ù.
¸ÖƼ ¾²·¹µùÀ» ÀÌ¿ëÇϸé CPUÀÇ ¿©·¯ Äھ È¿À²ÀûÀ¸·Î È°¿ëÇÒ ¼ö ÀÖ°í
¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù.
À̴ ƯÈ÷ I/O ÀÛ¾÷, º´·Ä ó¸®, ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö,
°ÔÀÓ °³¹ß µî¿¡¼ ¸Å¿ì À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.
1. ±âº» °³³ä
ÇÁ·Î¼¼½º(Process): ½ÇÇà ÁßÀÎ ÇÁ·Î±×·¥.
°¢ ÇÁ·Î¼¼½º´Â °íÀ¯ÇÑ ¸Þ¸ð¸® °ø°£À» °¡Áö¸ç µ¶¸³ÀûÀ¸·Î ½ÇÇàµÊ.
¾²·¹µå(Thread): ÇÁ·Î¼¼½º ³»¿¡¼ ½ÇÇàµÇ´Â ÀÛÀº ÀÛ¾÷ ´ÜÀ§.
ÇϳªÀÇ ÇÁ·Î¼¼½º´Â ¿©·¯ °³ÀÇ ½º·¹µå¸¦ °¡Áú ¼ö ÀÖ´Ù.
°¢ ½º·¹µå´Â ÀÚ¿øÀÇ ÀϺθ¦ °øÀ¯ÇÏÁö¸¸, µ¶¸³ÀûÀ¸·Î ½ÇÇàµÈ´Ù.
2. ¸ÖƼ ¾²·¹µùÀÇ Çʿ伺
¸ÖƼ ¾²·¹µùÀº ´ÜÀÏ ¾²·¹µå·Î ½ÇÇàÇÏ´Â °Íº¸´Ù ¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ÇÒ ¼ö ÀÖ¾î
È¿À²ÀûÀÌ°í ¿¹¸¦ µé¾î »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(UI) ÇÁ·Î±×·¥¿¡¼´Â
UI¸¦ ¾÷µ¥ÀÌÆ®ÇÏ´Â ¾²·¹µå¿Í ÆÄÀÏÀ» ÀÐ°í ¾²´Â ÀÛ¾÷À» ´Ù¸¥ ¾²·¹µå¿¡¼ ó¸®Çϸé
ÇÁ·Î±×·¥ÀÌ ¸ØÃßÁö ¾Ê°í µ¿½Ã¿¡ ¿©·¯ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.
¼¹ö ÇÁ·Î±×·¥¿¡¼ ´Ù¼öÀÇ Å¬¶óÀ̾ðÆ® ¿äûÀ» ó¸®ÇÒ ¶§
¿©·¯ ½º·¹µå¸¦ »ç¿ëÇÏ¸é °¢ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù.
3. ¸ÖƼ½º·¹µù ÀåÁ¡
È¿À²ÀûÀÎ ¸®¼Ò½º È°¿ë: µÇ¸ç ¸ÖƼÄÚ¾î CPU¿¡¼
°¢ ½º·¹µå¸¦ ¿©·¯ Äھ¼ ½ÇÇàÇÏ¸é ¼º´ÉÀÌ ±Ø´ëÈ°¡ µÈ´Ù.
ÀÀ´ä¼º Çâ»ó: ¿©·¯ ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ¾î¼
ÇÁ·Î±×·¥ÀÌ ´õ ºü¸£°í È¿À²ÀûÀ¸·Î µ¿ÀÛÇÑ´Ù.
ºñµ¿±â ó¸®: ¿©·¯ I/O ÀÛ¾÷À» µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ°í
³×Æ®¿öÅ© ¿äûÀ̳ª ÆÄÀÏ ÀÔÃâ·Â°ú °°Àº ÀÛ¾÷À» ºü¸£°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù.
4. ¸ÖƼ ¾²·¹µù ´ÜÁ¡
µ¿±âÈ ¹®Á¦: ¿©·¯ ¾²·¹µå°¡ µ¿ÀÏÇÑ ÀÚ¿øÀ» °øÀ¯ÇÒ ¶§,
¼·Î °£¼·Çϰųª µ¥ÀÌÅ͸¦ µ¤¾î¾µ ¼ö ÀÖ´Ù.
À̸¦ ÇØ°áÇÏ·Á¸é ¹ÂÅؽº(Mutex)³ª ¼¼¸¶Æ÷¾î(Semaphore)°°Àº
µ¿±âÈ ±â¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.
º¹À⼺: ¿©·¯ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇ¸é
ÄÚµåÀÇ º¹Àâµµ°¡ Áõ°¡ÇÏ°í ¹ö±×¸¦ ã±â ¾î·Á¿ï ¼ö ÀÖ´Ù.
5. C ¾ð¾î¿¡¼ ¸ÖƼ½º·¹µù »ç¿ë
C ¾ð¾î¿¡¼ ¸ÖƼ¾²·¹µùÀ» ±¸ÇöÇÏ·Á¸é POSIX threads (pthread) ¶óÀ̺귯¸®¸¦ »ç¿ëÇÔ.
ÀÌ ¶óÀ̺귯¸®´Â ¾²·¹µå¸¦ »ý¼ºÇÏ°í °ü¸®ÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
6. pthread ¿¹½Ã
C¿¡¼ ¸ÖƼ ¾²·¹µùÀ» »ç¿ëÇÏ·Á¸é pthread ¶óÀ̺귯¸®¸¦ È°¿ëÇÑ´Ù.
¾Æ·¡´Â °£´ÜÇÑ ¸ÖƼ½º·¹µù ¿¹Á¦ÀÌ´Ù.
===========================================
#include <stdio.h>
#include <pthread.h>
// ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö
void* my_thread_function(void* arg) {
int id = *((int*)arg); // ¾²·¹µå ID
printf("Thread %d is running\n", id);
return NULL;
}
int main() {
pthread_t threads[5]; // 5°³ÀÇ ¾²·¹µå »ý¼º
int thread_ids[5];
// ¾²·¹µå »ý¼º
for (int i = 0; i < 5; i++) {
thread_ids[i] = i; // °¢ ¾²·¹µå¿¡ ID ÇÒ´ç
if (pthread_create(&threads[i], NULL, my_thread_function, &thread_ids[i]) != 0) {
perror("Thread creation failed");
return 1;
}
}
// ¾²·¹µå Á¾·á ´ë±â
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL); // °¢ ¾²·¹µå°¡ Á¾·áµÉ ¶§±îÁö ±â´Ù¸²
}
printf("All threads finished\n");
return 0;
}
============================================
¹ÂÅؽº ¿¹½Ã
============================================
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void* my_thread_function(void* arg) {
pthread_mutex_lock(&lock); // ¹ÂÅؽº Àá±Ý
// ÀÓ°è ±¸¿ª (°øÀ¯ ÀÚ¿ø¿¡ Á¢±Ù)
printf("Thread is accessing shared resource\n");
pthread_mutex_unlock(&lock); // ¹ÂÅؽº Àá±Ý ÇØÁ¦
return NULL;
}
int main() {
pthread_t threads[5];
// 5°³ÀÇ ¾²·¹µå »ý¼º
for (int i = 0; i < 5; i++) {
if (pthread_create(&threads[i], NULL, my_thread_function, NULL) != 0) {
perror("Thread creation failed");
return 1;
}
}
// ¾²·¹µå Á¾·á ´ë±â
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
printf("All threads finished\n");
return 0;
}
=======================================
¹ÂÅؽº´Â ÇÑ ¹ø¿¡ ÇϳªÀÇ ½º·¹µå¸¸ °øÀ¯ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï º¸ÀåÇÑ´Ù.
pthread_mutex_lock: ¹ÂÅؽº¸¦ Àá±Ý.
pthread_mutex_unlock: ¹ÂÅؽº¸¦ Àá±Ý ÇØÁ¦.
Âü°í¹®Çå : Operating System Concepts (10th Edition) |
Hit : 325 Date : 2025/02/18 04:27
|