쓰레드로 알람 여러개 생성..
글쓴이: stypr / 작성시간: 화, 2004/07/27 - 11:25오전
#include<pthread.h> #include <signal.h> #include<stdio.h> int check1_print() { printf("\r\nPthread num 1\r\n"); alarm(5); } int check2_print() { printf("\r\nPthread num 2\r\n"); alarm(5); } int check3_print() { printf("\r\nPthread num 3\r\n"); alarm(5); } void check1() { signal(SIGALRM, (void *)check1_print); alarm(5); while(1); } void check2() { signal(SIGALRM, (void *)check2_print); alarm(5); while(1); } void check3() { signal(SIGALRM, (void *)check3_print); alarm(5); while(1); } int main() { pthread_t pth1, pth2, pth3; pthread_create(&pth1, NULL, (void *)&check1, NULL); pthread_create(&pth2, NULL, (void *)&check2, NULL); pthread_create(&pth3, NULL, (void *)&check3, NULL); pthread_join(pth1, NULL); pthread_join(pth2, NULL); pthread_join(pth3, NULL); }
이런식으로 코딩하게 되면 1,2 알람이 전부 무시되고 .. 3번째 쓰레드에서의
알람만 동작하게 되잖아요..
3개의 쓰레드에서 동시에 다 알람 사용을 할 수 있게 할 수는 없는건가요?
윈도우에서 보면 타이머 이름 정해서 각각 지정가능한데.. 리누기는 어떤지..
답변 부탁드립니다. 행복한 하루 되세욥
Forums:
제생각엔 sigaction을 쓰면 되는걸로 알고있읍니다.
signal대신 sigaction을 쓰면 되는걸로 알고있읍니다.
냠
어떤 의도의 프로그램인지 잘 모르겠지만요, signal은 thread 별로 동작하지 않습니다. 한 쓰레드가 signal을 발생시킨다고 해도 그 signal을 반드시 자기 쓰레드가 받는다는 보장이 없습니다. (solaris의 경우, 보통 다른 쓰레드를 생성한 쓰레드(부모 쓰레드?)가 받죠. 리눅스는 아무나 받는거 같습니다. 옛날에 테스트해본거라 다를 수도 잇음) signal이든, sigaction이든, signal은 보통 global하게 동작한다고 생각하고 짜는게 좋습니다. 아니면 각 signal 번호마다 이걸 받는 thread를 mapping해서 나머지들은 block하게 만들어야하죠.(그러나 이것도 제한이 많습니다.)
사견으로는 쓰레드랑 signal이랑은 무척이나 궁합이 안맞는 거 같아서 섞어서 프로그래밍하면 대략 코드가 구질구질해지는 부분이 많아지는 거 같습니다.
댓글 달기