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

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值