linux 进程间信号通知,线程间同步与通信 Test study Model

来源:互联网 发布:平果平板软件 编辑:程序博客网 时间:2024/05/16 18:26
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
pthread_mutex_t mutex;
int shareValue=0;
void signalHandler(int sigID)
{
    printf("signal is coming!\n");
    return 0;
}
void childOver(int sigID)
{
    int    pid=wait(NULL);
    shareValue=10;
//    pthread_mutex_lock(&mutex);
    printf("####################child process over!signal ID %d\n",sigID);
//    pthread_mutex_unlock(&mutex);
    return 0;
}
void *threadfun(void *arg)
{
    printf("$$$$$$$$$$$$$$$$$$Thread start>>>sleep 5>>>>>>>>!thread id:%ld\n",pthread_self());
    sleep(5);
    printf("$$$$$$$$$$$$$$$$child Thread errno :%d,%s,thraed id:%ld\n",errno,strerror(errno),getpid());
    pthread_mutex_lock(&mutex);
    //sleep(10);
    printf("lock value for add:%d,and sleep 5 seconds!\n",shareValue++);
    sleep(5);
    pthread_mutex_unlock(&mutex);
    pthread_exit(0);
}
int main()
{
    pthread_mutexattr_t mutexAttr;
    pthread_mutexattr_init(&mutexAttr);
    pthread_mutexattr_setpshared(&mutexAttr,PTHREAD_PROCESS_SHARED);
    pthread_mutex_init(&mutex,&mutexAttr);
    signal(SIGWINCH,signalHandler);
    signal(SIGCHLD,childOver);
    int i=0;
    pthread_t tid;
    pthread_create(&tid,NULL,threadfun,NULL);
    sleep(4);
    //for(;i<10;i++)
    {
        if(fork()==0)
        {
            pthread_t ctid;
            printf("**************create child process ID %d\n",getpid());
            pthread_create(&ctid,NULL,threadfun,NULL);
            i=pthread_join(ctid,NULL);
            printf("**************child process exit!*******status:%d:%s:pthread_join return value:%d*******\n",errno,strerror(errno),i);
            exit(0);
        }
    }
    i=sleep(15);
    printf("&&&&&&&&&&sleep interrupt happen,error reason :%s,error code :%d\n",strerror(i),i);
    printf("&&&&&&&&&&&&&ERRON NO:%d,error reason :%s\n",errno,strerror(errno));
    printf("&&&&&&&&&&&&&&&&process ID %d!\n",getpid());
//    #include "common.hisleep(10);
    printf("sleep return status :%d\n",sleep(10),errno);
//    while(1){};
    pthread_join(tid,NULL);
    pthread_mutexattr_destroy(&mutexAttr);
    pthread_mutex_destroy(&mutex);
    exit(0);
    return 0;
}
原创粉丝点击