마음의 안정을 찾기 위하여 - pthread의 활용 - 멀티쓰레드에서의 Blocking Thread의 강제 종료
2371852
460
515
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
pthread의 활용 - 멀티쓰레드에서의 Blocking Thread의 강제 종료
리눅스/리눅스 프로그래밍 | 2011/06/07 10:05


멀티 쓰레드에서 하나의 쓰레드(A)는 Blocking 상태로 작업을 기다리고 있다고 할때, 또 다른 쓰레드(B)는 전체 프로그램의 상황을 모니터링하고 있다고 가정할때...

A는 Blocking 상태(Ex:사용자로부터 입력을 기다리고 있는 상태 - getc,scanf등..)일때, 쓰레드 B에서 현재 실행중인 프로그램을 종료해야 한다고 판단이 되면, 강제로 A쓰레드의 입력 대기 상태를 중단 시키고 쓰레드를 종료시키고자 할때...

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
 
static void *infinite_loop(void *arg)
{
        char b[128];
        do {
                printf("wait for scanf()\n");
                scanf("%s", &b[0]);
                printf("done\n");
        } while (1);
        return (void*)(NULL);
}
 
static void control_cleanup(void *arg)
{
        pthread_t *tids = arg;
        printf("try to kill thread #0\n");
        pthread_cancel(tids[0]);
}
 
static void *control(void *arg)
{
        pthread_cleanup_push(control_cleanup, arg)
        do {
                pthread_testcancel();
        } while (1);
        pthread_cleanup_pop(1);
        return (void*)(NULL);
}
 
int main(int argc, char **argv)
{
        pthread_t tids[2];
        int ret;
        ret = pthread_create(&tids[0], NULL, infinite_loop, &tids[0]);
        if (ret) {
                perror("pthread_create()");
                return EXIT_FAILURE;
        }

        ret = pthread_create(&tids[1], NULL, control, &tids[0]);
        if (ret) {
                perror("pthread_create()");
                return EXIT_FAILURE;
        }
 
        sleep(5);
 
        printf("try to kill thread #1\n");
        pthread_cancel(tids[1]);
 
        pthread_join(tids[0], (void**)NULL);
        pthread_join(tids[1], (void**)NULL);
 
        return EXIT_SUCCESS;
}

2011/06/07 10:05 2011/06/07 10:05
Article tag list Go to top
View Comment 1
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
From. 구차니 2011/06/18 19:25
답글달기삭제
쓰레드는 이상하게 손이 안가고 그래요 ㅠ.ㅠ
PREV : [1] : NEXT
 
 
 
 
: [1] ... [106][107][108][109][110][111][112][113][114] ... [1323] :
«   2024/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
전체 (1323)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (6)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (7)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)